2016-11-29 4 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

오라클은 대소 문자를 구분합니다. 그러나 SQL과 PL/SQL의 모든 이름은 큰 따옴표로 묶지 않으면 자동으로 대문자로 변환됩니다.

CREATE DIRECTORY TEST_DIR AS 'c:\'; 

는 따라서 사용자가 정의한 디렉토리 TEST_DIR라고 :

그래서 :로

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