2011-05-16 1 views
5

다음은 테이블에서 플랫 파일로 데이터를 추출하는 데 사용하는 코드입니다.ORA-29283 : 파일 조작이 올바르지 않습니다. ORA-06512 : "SYS.UTL_FILE"행의 536

BEGIN 
    DECLARE 
     file_name VARCHAR2(50); 
     file_handle utl_file.file_type; 
BEGIN 
    file_name := 'table.txt'; 
    file_handle := utl_file.fopen('SEND',file_name,'W'); 
FOR rec in(
    SELECT   column 1 
       ||'~'||column 2 
       ||'~'||column 3 out_line 
    FROM table1)LOOP 
UTL_FILE.PUT_LINE(file_handle,rec.out_line); 
UTL_FILE.FFLUSH(file_handle); 
END LOOP; 
UTL_FILE.FCLOSE(file_handle); 
END; 
end; 

이 코드는 개발 데이터베이스에서 정상적으로 작동하지만 새로운 DB에서 실행하면 아래 오류가 발생합니다.


Oracle directory 'SEND' points to some UNIX directory which has rights as 
     'rwxrwsr-x' (Octal 2775) 
Oracle Version:11g 

Error starting at line 1 in command: 
    BEGIN 
    DECLARE 
     file_name VARCHAR2(50); 
     file_handle utl_file.file_type; 
BEGIN 
    file_name := 'table.txt'; 
    file_handle := utl_file.fopen('SEND',file_name,'W'); 
FOR rec in(
    SELECT   column 1 
       ||'~'||column 2 
       ||'~'||column 3 out_line 
    FROM table1)LOOP 
UTL_FILE.PUT_LINE(file_handle,rec.out_line); 
UTL_FILE.FFLUSH(file_handle); 
END LOOP; 
UTL_FILE.FCLOSE(file_handle); 
END; 
end; 

Error report: 
ORA-29283: invalid file operation 
ORA-06512: at "SYS.UTL_FILE", line 536 
ORA-29283: invalid file operation 
ORA-06512: at line 7 
29283. 00000 - "invalid file operation" 
*Cause: An attempt was made to read from a file or directory that does 
      not exist, or file or directory access was denied by the 
      operating system. 
*Action: Verify file and directory access privileges on the file system, 
      and if reading, verify that the file exists. 

나를이 문제를 해결하는 데 도움이 바랍니다.

이 질문을 해결하기 위해 더 많은 데이터가 필요하면 알려주십시오.

+0

은 (는) 새 DB에서 SEND 디렉토리가 생성 되었습니까? 새 DB에있는 DB 사용자는 DB-DIRECTORY 오브젝트에 대해 READ 및 WRITE 권한을 가지고 있습니까? – schurik

+0

'SEND'에 대한 명시 적 경로를 사용해 보셨습니까? 누가 폴더를 소유합니까? 사용 권한을 rwxrwsrwx로 변경하면 작동합니까? – forsvarir

+0

@schurik : 예, 디렉토리가 새 DB에 있으며 oracle 디렉토리에 READ 및 WRITE 권한이 있습니다. @forsvairr : SEND 대신 명시 적 경로를 사용할 수 있습니까? 그러면 어떻게 할 수 있니? 나는 오라클 디렉토리가 경로를 지정하는 유일한 방법이라고 생각했습니다. 디렉토리의 권한을 변경할 수 없으며 액세스 할 수 없습니다. 이 폴더는 'build'가 소유하고 있으며 사용자 'batch'는이 폴더에 파일을 생성합니다. 두 사용자 모두 '빌드'와 '배치'가 같은 그룹 – Vivek

답변

5

그래서 @Vivek는 실제 답변이 아닌 설명의 대화를 통해 문제에 대한 해결책을 얻었습니다. 누가 SO가 Q라고 말합니까 & 사이트가 아닌 포럼입니까? 어, 나, 다른 사람들 사이.

어쨌든이 질문에 대한 대답이 없으면 UTL_FILE.FOPEN()의 주제에 대한 답변을 볼 수 있습니다. Find it here.

P. 이 질문에 대한 적절한 대답이 아니기 때문에이 답변 커뮤니티 위키를 표시하고 있습니다. 다른 곳으로 리디렉션하는 것입니다.

+2

+1'으로 만든다. 나는 의견을 통해 질문에 대답하는 경향을 이해하지 못한다. – DCookie

-1

는 파일이 이미 이름이 "table.txt" 1. 변경 파일 sudo는 대한 Chown {사용자 이름}에 대한 소유권 미리 정의 된 디렉토리에 생성됩니다 가정 : {사용자 이름} 2 변경 모드를 table.txt 파일의 sudo chmod 777 table.txt

이제 시도해야합니다 !!!!

관련 문제