2016-11-29 8 views
0

私は、oracle pl sql(10 g)のテキストファイルに書き込もうとしています。 既存のディレクトリが作成されましたが、無効なパスが取得されています。以下は のコードです。ファイルをpl SQLに書き込もうとしているときに無効なパスです。

CREATE DIRECTORY test_dir AS 'c:\'; 
-- CREATE DIRECTORY test_dir AS '/tmp'; 

DECLARE 
    fileHandler UTL_FILE.FILE_TYPE; 
BEGIN 
    fileHandler := UTL_FILE.FOPEN('test_dir', 'test_file.txt', 'W'); 
    UTL_FILE.PUTF(fileHandler, 'Writing TO a file\n'); 
    UTL_FILE.FCLOSE(fileHandler); 
EXCEPTION 
    WHEN utl_file.invalid_path THEN 
    raise_application_error(-20000, 'ERROR: Invalid PATH FOR file.'); 
END; 
/

the following is the error: 
* 
ERROR at line 1: 
ORA-20000: ERROR: Invalid PATH FOR file. 
ORA-06512: at line 9 
+2

は、ディレクトリと同じPC上で実行しているデータベースですか?よくある間違いは、リモートデータベースサーバー上のutl_fileにローカルデスクトップ上のファイルを読み取ろうとすることです。 –

+0

はいrobert私のデスクトップ上でこのスクリプトを試してみました – bugsbunny

+0

実際にあなたのデスクトップPCで稼働しているデータベースですか、別のデータベースサーバにあるのですか? –

答えて

2

Oracleでは大文字と小文字が区別されます。ただし、SQLおよびPL/SQLのすべての名前は、二重引用符で囲まれていない限り、自動的に大文字に変換されます。

ので:したがって、あなたが定義したディレクトリがTEST_DIR呼ばれ

CREATE DIRECTORY TEST_DIR AS 'c:\'; 

CREATE DIRECTORY test_dir AS 'c:\'; 

が実際として実行されます。文字列(SQLまたはPL/SQLのシンボル名ではなく)で参照する場合は、'TEST_DIR'を使用する必要があります。 'test_dir'は機能しません。

は、このようにしてみてください:

fileHandler := UTL_FILE.FOPEN('TEST_DIR', 'test_file.txt', 'W'); 
+0

助けてくれてありがとう – bugsbunny

関連する問題