2010-02-27 3 views

답변

10

다음과 같이 시도해보십시오.

SET SERVEROUTPUT ON 
    BEGIN 
      -- A PL/SQL cursor 
      FOR cursor1 IN (SELECT * FROM table1) 
      LOOP 
      DBMS_OUTPUT.PUT_LINE('Column 1 = ' || cursor1.column1 || 
           ', Column 2 = ' || cursor1.column2); 
      END LOOP; 
    END; 
     /
+0

는 어떻게 다음 행으로 이동 커서에 증가 할 수 있습니까? – n0ob

+4

위와 같은 암시 적 커서는 다음 행을 자동으로 가져오고 가져올 행이 없을 때 종료됩니다. –

2

이 일의 신속하고 더러운 방법은 SQL의 *을 통해 실제로 플러스 :

SQL> set lines 200 
SQL> set heading off 
SQL> set feedback off 
SQL> spool $HOME/your_table.out 
SQL> select * from your_table; 
SQL> spool off 

SQL은 * 플러스는 기본보고 기능의 경우 몇 가지 참신한있다; 우리는 심지어 generate HTML files 수 있습니다.

매우 긴 테이블 (많은 행) 또는 넓은 테이블 (많은 열)을 사용하는 경우 파일에 직접 출력하는 것이 더 좋습니다.

declare 
    fh utl_file.file_type; 
begin 
    fh := utl_file.fopen('TARGET_DIRECTORY', 'your_table.lst', 'W'); 
    for lrec in (select * from your_table) 
    loop 
     utl_file.put(fh, id);   
     utl_file.put(fh, '::');   
     utl_file.put(fh, col_1);   
     utl_file.put(fh, '::');   
     utl_file.put(fh, col_2);   
     utl_file.put(fh, '::');   
     utl_file.put(fh, to_char (col_3, 'dd-mm-yyyy hh24:mi:ss'));   
     utl_file.new_line(fh);   
    end loop; 
    utl_file.fclose(fh); 
end; 
/

이것은 자질레처럼 보일 수 있지만 USER_TAB_COLUMNS에서 PUT() 호출을 생성 할 수 있습니다. UTL_FILE에 몇 가지 문제점이 있으므로 read the documentation입니다.

당신 DBMS_OUTPUT와 같은 제어 구조를 .... 사용할 수

begin 
    for lrec in (select * from your_table) 
    loop 
     dbms_output.put(id);   
     dbms_output.put('::');   
     dbms_output.put(col_1);   
     dbms_output.put('::');   
     dbms_output.put(col_2);   
     dbms_output.put('::');   
     dbms_output.put(to_char (col_3, 'dd-mm-yyyy hh24:mi:ss'));   
     dbms_output.new_line;   
    end loop; 
end; 
/

...하지만 당신은 SQL의 *에서 밖으로 스풀 위하여려고하는 경우에 게다가, 왜 쉽게 옵션을 사용하지?

0

이 도움이 될 수 있습니다 :

BEGIN  
    FOR MY_CURSOR IN (SELECT COLUMN1,COLUMN2,COLUMN3 FROM MY_TABLE) 
    LOOP 
    DBMS_OUTPUT.PUT_LINE('COLUMN1 = ' || MY_CURSOR.COLUMN1 ||', 
          COLUMN2 = ' || MY_CURSOR.COLUMN2 ||', 
          COLUMN3 = ' || MY_CURSOR.COLUMN3); 
    END LOOP; 
END; 
관련 문제