[PL/SQL] UTL_FILE 0 5 7,037

by 소울스타 [PL/SQL] UTL_FILE PL/SQL [2011.10.06 18:33:50]


안녕하십니까?

몇가지 질문을 하려고 하는데 여러군데 찾아보았는데 잘 되지 않아서 이렇게 질문올립니다.
UTL_FILE 패키지를 이용해서 text 파일을 쓰려고 하는데
프로시져 생성에서 에러가 납니다. 밑에 보시면

1)4번째 줄에서 PACK1.R_TYPE 식별자가 정의 되어야 합니다 라고 나오는데,
 도움좀 부탁드립니다.

2) 두번째 문에서 select * bulk collect into pack1.r from emp; 
  이부분은 ORA-03001: 현재에는 구현되어 있지 않은 기능입니다. 라고 나오는데 도움부탁드립니다

SQL>    create or replace procedure write_file
  2    (p_dir   in varchar2,
  3     p_filename in varchar2,
  4     p_r     in pack1.r_type)
  5 is
  6    v_file utl_file.file_type;
  7 begin
  8
  9    v_file := utl_file.fopen (p_dir, p_filename, 'w');
 10
 11    for i in  p_r.first .. p_r.last loop
 12 utl_file.put_line (v_file,  p_r(i).empno||' '||p_r(i).ename||' '||p_r(i).job||' '||p_r(i).mgr
 13   ||' '||p_r(i).hiredate||' '||p_r(i).sal||' '||p_r(i).comm||' '||p_r(i).deptno);
 14 utl_file.new_line (v_file);
 15    end loop;
 16
 17    utl_file.fclose (v_file);
 18
 19 end;
 20 /




SQL>    begin
  2 select * bulk collect into pack1.r from emp where empno in (select mgr from emp);
  3 write_file('PUP_DIR', 'exists.txt', pack1.r);
  4
  5 select * bulk collect into pack1.r from emp;
  6 write_file('PUP_DIR', 'emp_all.txt', pack1.r);
  7 end;
  8 /
PL/SQL procedure successfully completed.
by 허재영 [2011.10.07 09:05:50]
1. 입력값은 숫자인지 문자인지만 써주고 크기를 지정하면 에러 나요.
pack1 테이블의 r_type컬럼 타입과 크기까지 p_r 변수가 받아 가고 있네요.

2. cursor 로 먼저 select를 받은 다음에 bulk collect를 사용 해보세요.

by 소울스타 [2011.10.07 09:29:29]
먼저 답변에 감사 드리고, 죄송한데 첫번째 답변에대해 이해가 잘 안가서 그러는데 혹시 예를 들어주실수 있을까요??

by 허재영 [2011.10.07 09:39:50]
문자 p_r varchar2
숫자 p_r number

by 소울스타 [2011.10.07 09:51:00]
계속 질문해서 죄송한대 말씀대로 문자타입으로 지정해주 었는데 그럼
밑에 11번째 줄부터 for 돌려고 할때 PLS-00487: 'P_R' 변수를 참조하는데 부적당합니다 이런에러가 나오는데 ,,,

by 허재영 [2011.10.07 09:58:56]
pr 변수는 말그대로 문자 한개 값입니다.
.first 와 .last 는 특정 변수에서 사용가능 합니다.
1부터 pr 문자만큼 수행 예정이라면

for i in 1 .. to_number(pr) loop
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입