• ベストアンサー

オラクルでisnumeric?

よろしくお願いします。 オラクル(9i)のPL/SQLで char型で文字または数字が格納されている変数から number型の変数に代入したいのです。 通常 TO_NUMBERを行うが、 このとき、文字が格納されていた場合、 エラーが発生します(当然?) そのとき、事前にチェックをして 分岐さして、エラーを回避したいと思っているのですが、 なにか良い方法はないでしょうか? os:win 2000 server oracle :9i

質問者が選んだベストアンサー

  • ベストアンサー
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

Numberのチェックをするファンクションを作るか、 もしくは、エラー処理で対応する。 Exception で エラー処理(文字列だったときの処理)を 記述すればいい。

kansai01
質問者

お礼

あらら。 オラクルでは、関数は用意されていないのですね。 内容的には、難しくない処理なので、 どちらの内容で、対応とるか分かりませんが、 個人的には、functionですね。 出来るだけ、共通性が持たせれる用に頑張ります。

関連するQ&A

  • Oracleのnchar型について

    お世話になります。教えてください。 Oracle9iのnchar型について詳しく知りたいのですが。 char型の場合、データベースの作成時の文字コードで文字が格納 されますが、nchar型の場合、unicodeで格納されるという 認識でいます。 例えば、SJISには存在しない文字は、char型の列に登録すると、 文字化けするので、 nchar型の列に登録しようと思うのですが、nchar型の列の値を SQLPlusやosqledit,objectbrowserで表示しても '?' と 表示されます。 正しく nchar型の列の値を表示する にはどうすればいいのでしょうか? 例えば、VB.netなどのプログラムから取得した場合には、正しく 文字化けせずに取得できるという認識でいいのでしょうか?  よろしくお願いします。

  • oracleのPL/SQLのEXIT戻りでエラーが

    PL/SQLを実行したのですが、EXITの終了でエラーがとなってしまいます。エラーがでます。 being~endを書いてしてPL/SQLを実行しているのですが、 being~endのPL/SQLでエラーとなった場合、EXITの終了時の戻りで以下のエラーがでます。 エラーとならないようにするにはどうしたらよいでしょうか。 SP2-0670: 内部数値変換が失敗しました。 使用方法: { EXIT | QUIT } [ SUCCESS | FAILURE | WARNING | n | 変数 | :バインド変数 ] [ COMMIT | ROLLBACK ] 実行したSQLは以下となります。 set serveroutput on exec utl_file.fremove('DATA_PUMP_DIR','hogehoge.txt'); VARIABLE rtn NUMBER DECLARE BEGIN :rtn := 0; select count(*) from d; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE||','||SQLERRM); :rtn := 16; END; / EXIT :rtn →ここでエラーがでる oracleは19cです。 よろしくお願いします。

  • オラクルについての質問

    オラクルについての質問 いつもお世話になっております。 オラクル初心者でヴァージョンは11gを使用しております。 そしてSql developerで 現在ストアドプロシージャでカーソルを使った割と単純な PL/SQLを作成しているのですが、コンパイルエラー が出ており、その原因が掴みきれないでいるのですが、 例えばステップインの様な機能はないでしょうか。 順を追ってどこにエラー原因があるのかを確認したいのです。 ご教示の程、宜しくお願い致します。

  • オラクル(PL/SQL)のエラー

    いつもお世話になります。 オラクル・バージョン8.1.5を使用しています。 PL/SQLを実行すると以下のエラーが発生します。色々調べたのですが、解決しません。 なぜでしょうか?(ロジックがここでは書けないので、エラーのみ記載致します) ORA-06550:行1、列19:*PLS-00103: Encountered the symbol "." when expecting one of the following・・()-+mod この後ろは読めませんでした。 また、PL/SQLを実行したりするには、ただ単にオラクルをインストールしただけでは駄目なのでしょうか? よろしくお願い致します。

  • oracleシルバー、ゴールドを受けたいのですが・・

    oracleシルバーを受けようと思っています。 しかし、oracleシルバーの中でもなんか、色々あるみたいで、 ・オラクル シルバー フェロー ・オラクルマスター シルバー(オラクル9iデータベース) ・オラクルマスター シルバー(オラクル9i PL/SQL) ・オラクルマスター シルバー(オラクル 9i アプリケーションサーバー) があるようです。しかし、初心者なのでどれをとればいいのかとかが良くわかりません。。。そこで質問ですが、 1.oracleシルバーのどれを取得しても、「oracleシルバー取得した!」と宣言できるのでしょうか? 2.最終的にゴールドを、短時間の勉強で取得するには、まずはシルバーのどれを取得すればいいでしょうか?

  • Oracle SQLにて固定長でデータをselectする方法

    Oracle SQL超初心者の者です。 Oracle SQLで固定長を指定してデータをselectすることを考えているのですが、僕がやりたいことが見当たらず質問に至りました。 例えば、Field1はchar型で(10)で定義されているとします。このField1を固定長の(20)でselectしたいのです。 (空き領域は半角0を入力) また、Field1には「ヤマダ タロウ」や「ヤマノウチ ケンジロウ」のように、固定長のデータが格納されていません。 このようなことがOracle SQLで実現可能であれば是非とも教えていただきたいです。

  • CHAR型ポインタについて。

    CHAR型ポインタについて。 当方C言語初心者です。 ポインタと文字列の関係分からないことが出てきました。 参考にしている本があり、そのページに下記のソースで「const char *pc1」のポインタ変数を用意して、そこに直接文字列を代入しています。 本来、「char *pc1」はchar型のアドレスを格納するための変数のはずなのに、その変数に文字列を代入してることに疑問を感じました。 この記述の仕方は間違っていないのでしょうか?また、アドレスを格納するための変数「*pc1」に「abcdefg」の文字列はどのようにメモリ上で格納されているのでしょうか? 知ってどうなるの?みたいな質問かもしれませんが、ご教授いただけると幸いです。 #include <stdlib.h> #include <string.h> void func(void) { const char *pc1 = "abcdefg"; //←ココ char *pc2 = (char *)malloc( strlen(pc1) +1); if ( pc2 ) { strcpy( pc2, pc1 ); free( pc2 ); } }

  • Pro*cのバインド変数をカンマ区切りで指定できますか?

    Pro*cのバインド変数で下記のようなwhere句のinでカンマ区切りを指定することはできないのでしょうか? Oracle9iです。 適当な書き方で申し訳ありませんがよろしくお願いします。 ------------------------ EXEC SQL BEGIN DECLARE SECTION; const char *bindAAA; EXEC SQL END DECLARE SECTION; // bindAAAバインド変数に'1,2,3'という具合に格納 ↓のSQLを実行したい select * from AAA where BBB in (:bindAAA)

  • oracle9iでPL/SQLの設定

    oracle9iでPL/SQLを使用できるようにする場合、DBCAでデータベースを構築した場合デフォルトで使用できるようになりますでしょうか?現在環境がなく検証できない状況で困っています。

  • PL/SQLの変数について

    困っています。 ホスト引数で :NAME = "あいうえお" としてoracleに渡し、 PL/SQLでNAMEという変数で受け取った後、 Xという変数にその"あいうえお"を'あいうえお' のように、シングルクォーテーションで囲んで入れたいのです。 ですが、 NAME = 'X' としたら文字列として認識してしまい、 NAME = ''X'' としたらPLS-00103のエラーが出てしまいます。 シングルクォーテーションで囲んだ文字列を変数にセットする場合はどのように書いたら宜しいのでしょうか??