2010-02-27 2 views

Répondre

10

essayez avec quelque chose comme ceci.

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

comment puis-je augmenter au curseur de se déplacer à la ligne suivante? – n0ob

+4

Vous n'avez pas besoin de - un curseur implicite comme celui ci-dessus récupère automatiquement la ligne suivante et se ferme quand il n'y a plus de lignes à récupérer. –

2

La façon rapide et le plus sale de le faire est en réalité par le biais de SQL * Plus:

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 * Plus a une nette si la fonctionnalité de rapports de base; nous pouvons même generate HTML files.

Si vous avez une très longue table (beaucoup de lignes) ou une grande table (plusieurs colonnes), vous feriez mieux de sortir directement dans un fichier, comme ceci.

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; 
/

Cela peut ressembler à une corvée, mais le PUT() les appels peuvent être générés à partir USER_TAB_COLUMNS. Il y a quelques getchas avec UTL_FILE donc read the documentation.

Vous pourrait utiliser la même structure de contrôle avec 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; 
/

... mais si vous allez à la bobine à partir d'un SQL * Plus, pourquoi ne pas utiliser l'option plus facile?

0

Cela peut aider:

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; 
Questions connexes