システム開発ブログ/ 産業システム部 Yahoo!ブックマークに登録 Google ブックマーク はてなブックマーク Livedoorクリップ シェア

システム開発ブログ

Twitterでilovex_officialをフォローしてください

最近の記事

カテゴリー

部署

月別アーカイブ

以前の部署別ブログ

Oracle ORA-00932

中村(次)
中村(次) (2010年4月 9日 13:00)
産業システム部 / データベース

先日あるプログラムを実行したところ、
「ORA-00932: データ型が一致しません: -が予想されましたが-です。」が発生しました。

このエラーはよくよく見るものなのですが、
「DATEが予想されましたがNUMBERです。」など、
明らかに型変換に失敗している旨のメッセージしか見たことがありませんでした。

この部分、「-が予想されましたが-です」が何を示しているのかまったくわからず、
嵌ってしまいました。

まずは、純粋に型の変換に失敗しているのだと思い、
全ての型をVARCHAR2にして実行したところ、同じエラーが発生しました。

ということは、型変換自体が問題ではないということになります。

エラーが発生している箇所を調べたところ、
カーソルをFETCHしている箇所でエラーが発生していることがわかりました。

さらに調べてみると、SELECT句とFETCHする変数の個数に問題があることがわかりました。

--カーソルをフェッチしたときに入れる変数を宣言する。
TYPE TEMP IS RECORD( TEST_1 NUMBER, TEST_2 NUMBER );

--カーソルオープン
OPEN CUR_TEMP FOR 'SELECT 1 FROM DUAL'; ←SELECTは1個

--フェッチ
FETCH CUR_TEMP INTO TEMP;

上記のように、SELECT句で取得する件数がより、FETCHする変数の数が多い場合は、
「ORA-01007: 変数が選択リストにありません。」のエラーが発生します。


--カーソルをフェッチしたときに入れる変数を宣言する。
TYPE TEMP IS RECORD( TEST_1 NUMBER, TEST_2 NUMBER );

--カーソルオープン
OPEN CUR_TEMP FOR 'SELECT 1, 2, 3 FROM DUAL'; ←SELECTは3個

--フェッチ
FETCH CUR_TEMP INTO TEMP;

上記のように、SELECT句で取得する件数がより、FETCHする変数の数が少ない場合は、
「ORA-00932: データ型が一致しません: -が予想されましたが-です。」のエラーが発生します。

FETCHしようとしたが、入れる変数がない ⇒ 同じ型の変数がない(型が合わなかった)ため、
「ORA-00932」が発生したのではないのかと思います。

FETCHする変数が多い場合に発生する「ORA-01007」ならすぐに気づけたのだが、
「ORA-00932」= 型変換が失敗していると思い込んでしまい、どっぷり嵌ってしまいました。

「システム開発ブログ」へのコメントやご意見等ありましたら、 ファンページまでお願いします。  Facebook のファンページ

お問い合せ・情報はこちらの電話番号におかけください:03-3232-2525 お問合せ・資料請求はこちらをクリックしてください
ページのトップ
システム開発・一括受託開発。見積依頼受付中

システム開発専用サイト

システム開発の流れ・手順、実績など。アイロベックスのシステム開発を紹介。

VB .NETを主言語としたWebアプリケーションの開発

要件分析から保守まで、お客様の現場での問題解決だけでなく、IT経営の援護者としてトータルソリューションサービスを提供しています。

MovableType を使ったウェブサイト構築

魅力あるウェブサイトデザイン、構成はもとよりMovableTypeを使用したウェブサイトの作成、JAVA、CGIによる注文フォームの作成等、ビジネスを強力にサポートします。

フォルダーアクセス権限確認ツール『AD-Folder』

Windowsフォルダーアクセス権限確認ツール

フォルダーアクセス権限を一目で確認。使用版を無償でご利用いただけます。

スクール運営を応援する講座情報管理システム『CMS+AD for School』

Webとリアルをつなぐコンテンツマネージメントシステム

Webサイト・モバイルサイト・チラシ(PDF)・カタログ(InDesign)を、簡単かつ正確に作成できます。

「システム開発ブログ」の更新情報をTwitterで。

Twitter公式アカウントに認定されています

「システム開発ブログ」の更新情報をTwitterで。ぜひ、フォローをお願いします。