こんにちは、カメ助(@kamesuke_blog)です。
OracleDBからデータ取得する際に、「ORA-00923: FROMキーワードが指定の位置にありません。」のエラーに遭遇しました。対処方法について調べたので共有します。
この記事はこんな人にオススメ
・「ORA-00923」の原因を知りたい
・「ORA-00923」の対処方法を知りたい
OracleDBで「ORA-00923: FROMキーワードが指定の位置にありません。」のエラーが出た際には、今回の記事を参考に対応してみて下さい!
ORA-00923の原因
結論:ORA-00923のエラーは、「FROM句より前のSQL文が間違っている」ことが原因です。
そのため、FROM句より前のSQL文を修正すれば解決できます。
ORA-00923の対処方法
ORA-00923のエラーの対処方法は全部で3つあります。
- FROM句のスペル間違い
- SELECT句の別名に問題がある
- Oracle SQLのSELECT句の仕様でエラーになっている
順番に紹介しますので1から順番に確認していってください。
対処法1:FROM句のスペル間違い
まずは、「FROM句のスペル間違い」を確認しましょう。
SELECT USER_NAME FORM TABLE_NAME; ←ERROR(FORMになっている)
SELECT USER_NAME FROM TABLE_NAME; ←OK(FORMをFROMに変更)
「FROM」のスペルが、「FORM」と書いてエラーになることがあります。
対処法2:SELECT句の別名に問題がある
次は、SELECT句の別名に問題がないか確認しましょう。
- 別名にOracle SQLの予約語を使用している
- 別名にシングルクォーテーション「’」を使用している
- 別名の先頭文字が数字になっている
順に解説していきます。
1:別名にOracle SQLの予約語を使用している
Oracle SQLには、予約語と呼ばれる別名には使用できない文字列があります。(例)DATE、SIZEなど
対処方法としては、別名に予約語を使用しないようにすれば解決します。
SELECT USER_NAME DATE FROM TABLE_NAME; ←ERROR(予約語のDATEを使用している)
SELECT USER_NAME DATE_TEST FROM TABLE_NAME; ←OK(DATEをDATE_TESTに変更)
2:別名にシングルクォーテーション「’」を使用している
Oracle SQLでは別名に、シングルクォーテーション「’」を使用するとエラーになります。
対処方法としては、別名のシングルクォーテーション「’」をダブルクォーテーション「”」に変更すれば解決します。
SELECT USER_NAME ‘NAME‘ FROM TABLE_NAME; ←ERROR(シングルクォーテーション「’」を使用している)
SELECT USER_NAME “NAME“ FROM TABLE_NAME; ←OK(「’」を「”」に変更)
3:別名の先頭文字が数字になっている
Oracle SQLでは別名の先頭文字に数字は指定できません。
対処方法としては、別名の先頭文字の数字を英字に変更すれば解決します。
SELECT USER_NAME 1NAME FROM TABLE_NAME; ←ERROR(先頭文字が数字「1」になっている)
SELECT USER_NAME NAME FROM TABLE_NAME; ←OK(「’」を「”」に変更)
対処法3:Oracle SQLのSELECT句の仕様でエラーになっている
Oracle SQLでは、SELECT句で全項目取得したうえで、個別の項目を取得する場合に注意が必要です。
対処方法としては、全項目取得する「*」には「テーブル名.*」を指定すれば解決します。
SELECT * ,USER_NAME FROM TABLE_NAME; ←ERROR
SELECT TABLE_NAME.*,USER_NAME FROM TABLE_NAME; ←OK(「*」を「TABLE_NAME.*」に変更)
参考記事より、SQLServerではエラーにならないみたいです。
終わりに
今回は、OracleDBの「ORA-00923: FROMキーワードが指定の位置にありません」の原因と対処方法について説明しました。
あまり遭遇しないと思いますが、エラーメッセージからエラー原因の特定が意外と難しいため、今回の記事内容を頭の片隅に覚えていただければ幸いです。
教訓:ORA-00923は、FROM句の前を見るべし!!
コメント