ORA-29280: 無効なディレクトリ・パスです

このQ&Aのポイント
  • Oracle初心者が機器更新によるシステム移行の際に、抽出データをCSVに出力するプロシージャで「ORA-29280: 無効なディレクトリ・パスです。」というエラーが発生してしまい、対処法が分からない状況です。
  • プロシージャ内の抜粋部分では、'EXPORT_DIR'という変数を使用していますが、この変数の定義場所がわかりません。
  • 環境はOracle11gとWindowsServer2008R2です。エラーの原因として、'EXPORT_DIR'が正しく設定されていない可能性があるため、どこで定義すれば良いか教えてほしいです。
回答を見る
  • ベストアンサー

ORA-29280:無効なディレクトリ・パスです

Oracle初心者です。 機器更新によるシステム移行を行っているのですが、 Oracleより、抽出データをCSVに出力する、プロシージャにて、 「ORA-29280: 無効なディレクトリ・パスです。」 のエラーが出て対処法が分からずに困っています。 以下、プロシージャ部分抜粋 -------------------------------------------------------------------------------- fno1 utl_file.file_type := utl_file.fopen('EXPORT_DIR','TEST1.csv', 'W'); fno2 utl_file.file_type := utl_file.fopen('EXPORT_DIR','TEST2.csv', 'W'); -------------------------------------------------------------------------------- 上記の、「EXPORT_DIR」とは、どこで定義されている変数(?)なのでしょうか? なんとなく、EXPORT_DIRが正しくないためのエラーと考えているのですが… 処理の流れとしては、TEST.bat → TEST.sql → プロシージャ  で、 TEST.batには試しに、SET EXPORT_DIR = D:\TEST としてみたのですが、エラーのままでした。 ひょっとして、Oracleに設定すべきもの? すみませんが、どこでどのように定義するか教えてください。 環境: Oracle11g WindowsServer2008R2

  • torum
  • お礼率61% (19/31)
  • Oracle
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ。 > ひょっとして、Oracleに設定すべきもの? そうです。 ディレクトリオブジェクトです。 こんな感じで設定して下さい。 sqlplus "/ as sysdba" SQL> Create directory EXPORT_DIR as 'D:\TEST'; SQL> grant read on directory EXPORT_DIR to ユーザ名; SQL> grant write on directory EXPORT_DIR to ユーザ名; SQL> exit

torum
質問者

お礼

なるほど! 現行の設定を確認後、登録してみたいと思います。 ありがとうございました。

関連するQ&A

  • PL/SQL-プロシージャ

    プロシージャBはテスト実行のため、プロシージャAを真似て作成しています。 --最後のIF文で、プロシージャAかBのどちらかに走らせたいと思っています。 DECLARE --プロシージャA--------------------------------------- PROCEDURE A IS fno1 utl_file.file_type; dnm1 varchar(200) :='XXX'; fnm1 varchar2(200) :='BBB.txt'; CURSOR cu1 is select XYZ as ABC from CCC; BEGIN fno1 := utl_file.fopen(dnm1,fnm1,'w'); FOR CU1_REC1 in CU1 loop utl_file_put_line(fno1,' '|| CU1_REC1.XYZ END LOOP; utl_file.fclose(fno1); end; --プロシージャB------------------------------------- プロシージャAと似たような処理 --プロシージャAかBかを判定するIF文------------------------------ BEGIN IF CCC.ABC = '0'; THEN A; ELSE B; ENDIF; END; /

  • UTL_FILEパッケージについて

    UTL_FILEパッケージを使用してPL/SQLよりテキスト出力したいのですが上手くいきません。 まずsysdbaにて「create directory aaa as 'd:\'」にてディレクトリを作成しました。 次に以下のようにプロシージャを作成しました。 create procedure kan_exp( fir IN varchar2, filename IN varchar2) is file UTL_FILE.FILE_TYPE; CURSOR tk01_kan_c IS select aaa,bbb from tableCCC begin file := UTL_FILE.FOPEN(dir, filename, 'w'); UTL_FILE.PUT_LINE(file, 'TEST'); UTL_FILE.NEW_LINE(file); for kanrec in tk01_kan_c loop UTL_FILE.PUT_LINE(file, 'TEST'); end loop; END kan_exp; / それを以下のように呼び出しましたが、 execute kan_exp('UTL_FILE_DIR', 'aaa.csv'); 「ORA-29280:無効なディレクトリパスです。」エラーが発生します。 色々と調べてユーザに権限が必要かと思い、「grant read on directory to User」としましたが、ユーザーまたはロール'User'は存在しませんと出てきます。※もちろんUserは存在します。 なにか足りないものがあるのでしょうか? ご教示いただけますでしょうか?宜しくお願いします。

  • PLSQLでファイルに書き込みをしたいけど出来ない。。

    ☆ とっても、初心者です。 本日、初めてのPLSQLプルグラムを書いてみました。 下記のプログラムがそうなのですが、SQL*Plusを起動し、 START XXXXXX (←作成したSQL文の名前) と書いて実行して見ましたが、エラーは出ないのですが、私の希望では、[test.ddl]ファイルにsakurakoっと出力されていて欲しいのですが、なんにも更新されていません。。。 LOG:プロシージャが作成されました。 LOG:エラーはありません。 何か方法がまずいのでしょうか? あぁぁ、、何方かよきアドバイスをお願い致します。 ===================================== CREATE OR REPLACE PROCEDURE Create_US_Company IS CURSOR WORK_LINE IS SELECT * FROM TEST.US_COMPANY; TYPE FILE_TYPE IS RECORD (ID BINARY_INTEGER); FILE_HANDLE UTL_FILE.FILE_TYPE := UTL_FILE.FOPEN('D:\tmp,'test.ddl','w'); STR VARCHAR2(200); BEGIN STR := 'SAKURAKO'; UTL_FILE.PUT_LINE ( FILE_HANDLE, STR); UTL_FILE.FCLOSE (FILE_HANDLE); END Create_US_Company; ===================================== ☆

  • PL/SQLのプロシージャが動かない

    テキストファイル(test.txt)から文字列を一行ずつ読み込んでDBMS_OUTPUTで表示を最後の行まで繰り返すプロシージャを作りたいのですが、declareで実行する時は何の問題も出ないのにプロシージャを作ろうとするとエラーが発生します。 原因が理解できないのですが返答をお願いします。 create or replase procedure TXT_R as FH UTL_FILE.FILE_TYPE; V_LINE VARCHAR2(32767); BEGIN FH := UTL_FILE.FOPEN('DATA_PUMP_DIR','test.txt','R'); LOOP UTL_FILE.GET_LINE(FH,V_LINE); DBMS_OUTPUT.PUT_LINE(V_LINE); END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN UTL_FILE.FCLOSE(FH); END; 実行すると ORA-00905: キーワードがありません。 のエラ-が出ます

  • CSVファイルを読み込んでテーブルの更新

    こんばんは。 oracle9iでPL/SQLを使用して、CSVファイルを 読み込んで、テーブルの更新を行いたいと 思っています。 CSVファイル、テーブル共に最初の2つがキー項目です。 ■CSVファイル 001, 111, 10000, 20000 002, 222, 30000, 40000 ・・・・・ ・・・・・ 009, 999, 55555, 55555 ■テーブル 001, 111, 99999, 99999 002, 222, 99999, 99999 ・・・・・ ・・・・・ 009, 999, 99999, 99999 ■テーブル(処理後) 001, 111, 10000, 20000 002, 222, 30000, 40000 ・・・・・ ・・・・・ 009, 999, 55555, 55555 わかったのは、CSVファイルを行単位で読み込む所までです。 DECLARE   File_Handle UTL_FILE.FILETYPE; Read_Line VARCHAR2(1023); BEGIN File_Handle := UTL.FILE.FOPEN('dir', 'file', 'r'); BEGIN LOOP UTL.FILE.GETLINE(File_Handle, Read_line); END LOOP; END; UTL.FILE.FCLOSE(File_Handle); END; 1行を読み込んだのはいいけど、この後がよくわかりません。テーブルを更新する所とあわせて、ご教示ください。

  • UTL_FILE_DIRについて

    お世話になっております。 PL/SQLのファイル出力を行おうとUTL_FILE_DIRを組んだのですがファイルが更新されません。 エラーも検出されないのでどうしたものかと悩んでおります。 ソースは一番最後に記載します。 現状のやった作業に関しては ・初期化パラメータにUTL_FILE_DIR = * selectで確認済み ・テキストファイルの確認  ソースに記載してる通りの所に存在している。(権限もフルコン) oracleのバージョンは9iです。 よろしくお願いします。 set serveroutput on; DECLARE -- ファイルハンドラ vHandle UTL_FILE.FILE_TYPE;   vDirname      VARCHAR2(250);   vFilename      VARCHAR2(250); vOutput VARCHAR2(32767); error_code       NUMBER(5); error_message VARCHAR2(2048); BEGIN vDirname := 'c:'; vFilename := 'test.txt'; vHandle := UTL_FILE.FOPEN(vDirname, vFilename, 'w'); vOutput := ファイル出力です'; UTL_FILE.PUT_LINE(vHandle, vOutput); UTL_FILE.FCLOSE(vHandle); EXCEPTION WHEN OTHERS THEN error_code := sqlcode; error_message := sqlerrm; dbms_output.put_line('エラーコード:' || error_code); dbms_output.put_line('エラーメッセージ:' || error_message); END; / 上記実行するとエラー無しで正常終了しますがテキストファイルは更新されていません。

  • ファイルへの書き込みができない

    ファイルへの書き込みができない 実行時エラーは表示されないのですが、ファイルへ出力されません。 コードは以下のようにしています。 よろしくお願いします。 declare FILE_HANDLE utl_file.file_type; STR varchar2(1023); begin -- 書き込みモードでファイルオープン FILE_HANDLE := UTL_FILE.FOPEN('c:\tmp','test.txt','W'); STR := 'test'; -- ファイルへ出力 UTL_FILE.PUT(FILE_HANDLE,STR); -- ファイルのクローズ -- UTL_FILE.FCLOSE(FILE_HANDLE); exception when others then dbms_output.put_line('その他エラー'); end; /

  • プロシージャの実行方法

    テキストファイル(test.txt)から文字列を一行ずつ読み込んでDBMS_OUTPUTで表示を最後の行まで繰り返すプロシージャを作りたいのですが、プロシージャ制作までは出来るのですがプロシージャの実行が出来ません。 原因が理解できないのですが返答をお願いします。 create or replace procedure TXT_R as FH UTL_FILE.FILE_TYPE; V_LINE VARCHAR2(32767); BEGIN FH := UTL_FILE.FOPEN('DATA_PUMP_DIR','test.txt','R'); LOOP UTL_FILE.GET_LINE(FH,V_LINE); DBMS_OUTPUT.PUT_LINE(V_LINE); END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN UTL_FILE.FCLOSE(FH); END TXT_R; ここまでプロシージャです。 そしてネットで調べた結果引数が無い時は書かなくていいと書かれていたのですが、 exec TXT_R; で実行すると ORA-00900: SQL文が無効です。 となってしまいます。

  • PL/SQLでCSVを作成又は、読み込みたい

    下記のエラーが出て、UTL_FILEパッケージが使用できません。なぜでしょう? 下記SQL文の「※1」箇所で「UTL_FILE」の後 「.」を入力しても、「FILE_TYPE」は選択肢には表示されず、やむを得ず手入力しました。 ~~~~~~~~~~~~~~~~~~~~~~~ 問題のSQL文 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ DECLARE  DNM VARCHAR2(200) := 'C:\TMP';  FNM VARCHAR2(200) := 'TEST.CSV';  CURSOR CUR1 IS      SELECT COL1, COL2, COL3, COL4, COL5     FROM A;  FHANDLE UTL_FILE.FILE_TYPE;  ←←←←←←←←←←  ※1  REC VARCHAR2(2000); BEGIN  FHANDLE := UTL_FILE.FOPEN(DNM,FNM,'W',2002);  UTL_FILE.PUTF(FHANDLE,'"%S","%S","%S","%S"\N','タイプ','オブジェクト','作成日','更新日');    BEGIN    FOR CUR_REC IN CUR1 LOOP    UTL_FILE.PUTF(FHANDLE,'"%S","%S","%S","%S"\N','タイプ','オブジェクト','作成日','更新日');   END LOOP;  END;  UTL_FILE.FCLOSE(FHANDLE); END; ~~~~~~~~~~~~~~  エラーメッセージ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Error [row:1,col:1] ORA-06510: PL/SQL: ユーザー定義の例外が発生しましたが、処理されませんでした ORA-06512: "SYS.UTL_FILE", 行120 ORA-06512: "SYS.UTL_FILE", 行293 ORA-06512: 行14

  • ORA-01722: 数値が無効です

    よろしくお願いします ORACLEのストアドプロシージャを実行した際、 上記のような結果が出ました。 調査した結果、ストアドプロシージャ内でのSQLで SELECT ・・・ FROM A_table WHERE A_table.a_date > 20050120 ; のようなものがあり、 A_tableのa_dateカラムが文字列型であり、 数値型との比較を行っているための エラーと確認が取れました。 しかし、 私が確認をとったのはシステムのテスト環境なのですが、 本番の環境はまったく同じプロシージャで エラーが出ていないようなのです。 なぜなのでしょうか??? 考えられる原因がある方がいらっしゃいましたら 是非教えてください。 よろしくお願いいたします。