日々常々

ふつうのプログラマがあたりまえにしたいこと。

Oracle10gXEでファイル出力

UTL_FILEでファイル出力しようとしたら失敗したので。

UTL_FILEが使えない

[row:xx,col:xx] ORA-06550: 行xx、列xx:
PLS-00201: 識別子UTL_FILEを宣言してください。
ORA-06550: 行xx、列xx:
PL/SQL: Item ignored
(以下略)

SYS.UTL_FILEに対するEXECUTE権限がない。試験環境というか実験環境なので、手を抜いてPUBLICにGRANT。

sqlplus SYS AS SYSDBA
GRANT EXECUTE ON SYS.UTL_FILE TO PUBLIC;

無効なファイル操作

[row:1,col:1] ORA-29283: 無効なファイル操作です。
ORA-06512: "SYS.UTL_FILE", 行475

原因はいくつかあるけど、根本的にはDIRECTORY_PATHが無効って事かな。単純なタイプミスの場合とか、作り忘れ、あとPATHに日本語を使っている場合に出たり。これはデフォルトインストールのままだとUnicodeなのが原因、かも。
ディレクトリ名によっては、日本語を使っててもDIRECTORY_PATHは有効になってたりする。出力ファイルはファイル名が化ける。入力ファイルは当然読めません。
他にこのエラーになる原因に、Oracleをインストールしているのはサーバなのに、ローカルのフォルダでdirectoryを作ろうとしていると言うのがあります。UTL-FILEの出力先はさーばなのでご注意を。もっとも、ローカルにインストールしたなら関係ありませんが。

データが見つからない

[row:1,col:1] ORA-01403: データが見つかりません。
ORA-06512: 行xx

ディレクトリ・オブジェクト名が誤っている可能性が高い。小文字で書いてしまっているとか。