2014-10-29 4 views
0

일부 pl/sql 오류와 관련하여 도움이 필요합니다. 필자는 함수를 작성하여 텍스트 파일에서 3 자리 숫자를 추출하여 나중에 사용해야합니다. 나는이 오류 내가 어떻게해야 해요 어떤 번호 100200.하는 'POVECANJE.txt'의PL/SQL 오류 - 지침이 필요합니다.

Function created 
begin :g_deptno:=extract_dep('POVECANJE.txt'); end; 
ORA-29280: invalid directory path 
ORA-06512: at "SYS.UTL_FILE", line 41 
ORA-06512: at "SYS.UTL_FILE", line 478 
ORA-06512: at "HR.EXTRACT_DEP", line 9 
ORA-06512: at line 1 

내용을 받기를 실행 한 후

CREATE OR REPLACE FUNCTION extract_dep 
    (v_filename IN VARCHAR2) 
    RETURN NUMBER 
IS 
    v_filehandle UTL_FILE.FILE_TYPE; 
    v_deptno  NUMBER; 
    v_fileline  VARCHAR2(100); 
BEGIN 
    v_filehandle:=UTL_FILE.FOPEN('/home/oracle/vezba', v_filename, 'r'); 
    UTL_FILE.GET_LINE(v_filehandle, v_fileline); 
    v_deptno:=TO_NUMBER(SUBSTR(v_fileline,1,3)); 
    UTL_FILE.FCLOSE(v_filehandle); 
    RETURN v_deptno; 
END extract_dep; 
/

VARIABLE g_deptno NUMBER 
EXECUTE :g_deptno:=extract_dep('POVECANJE.txt'); 

이렇게하려면,이 코드를 작성? 파일 경로를 확인했는데 정확합니다. 무엇을 해야할지 모르겠으니 아무도 해결책을 안다면 말하십시오. 감사합니다. .

답변

2

Oracle 11.2 "Supplied packages and types" documentation에 따르면 utl_file.fopen() 함수에서 사용되는 디렉토리 지정은 디렉토리 객체 여야합니다. (이들은 "글로벌"DB 객체이기 때문에, 일반적으로 DBA에 의해) 즉,로 ...

create directory dir_vezba as '/home/oracle/vezba'; 

당신의 .fopen() 호출에 절대 경로를 사용하지만, 디렉토리 정의가 필요 없습니다 ... 그리고 ... 당신은 파일 가져 오기에 사용하는 DB 사용자에게

grant read on directory dir_vezba to your_db_schema_name_here; 
을 부여 ... 당신의 .fopen() 호출에 매개 변수로 디렉터리 개체를 사용

v_filehandle := UTL_FILE.FOPEN('DIR_VEZBA', v_filename, 'r'); 

귀하의 your_db_schema_here 사용자에게 DBA 권한이 있거나 read any directory 권한이있는 경우 grant read on directory ... 부분을 생략 할 수 있습니다.

관련 문제