我想使用DBMS_OUTPUT.PUT_LINE
,但行數超過了1.表中沒有任何按順序增加的值,所以我不能使用循環。有什麼方法可以打印出表格中的每一行?如何在pl sql中使用匿名塊打印出整個表格?
4
A
回答
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;
/
2
這樣的快速和骯髒的方式實際上是通過在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有一些巧妙的基本,如果報告功能;我們甚至可以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;
相關問題
- 1. 執行匿名PL/SQL塊
- 2. 在PL/SQL中創建匿名塊
- 3. 使用pl/sql匿名塊更新表中的列
- 4. 打印DO匿名塊
- 5. 如何在匿名PL/SQL塊中使用重複佔位符名稱?
- 6. 在PL/SQL匿名塊中使用替換字符串
- 7. 如何打印出PL/SQL程序?
- 8. 多個Update語句的匿名塊pl/sql出錯
- 9. 如何解決匿名PL/SQL塊中的編譯錯誤?
- 10. 使用來自SOCI的匿名PL SQL塊調用PLsql腳本
- 11. 如何使用eclipselink返回匿名pl sql中的值
- 12. 使用JDBC編寫帶綁定變量的匿名PL/SQL塊
- 13. 如何在PL/SQL的新行中打印輸出?
- 14. 聲明在匿名pl/sql塊中的順序
- 15. 執行匿名PL/SQL塊並獲得結果集在java中
- 16. PL/SQL,如何使觸發器打印出特定的列行?
- 17. PL/SQL幫助。如何編寫一個匿名塊,插入100個新行
- 18. 如何在PL/SQL中打印ARRAY的每個元素?
- 19. 如何打印非素數? PL/SQL
- 20. 如何從pl/sql光標打印值?
- 21. 如何在java中使用printf()打印出表格?
- 22. 如何使用jQuery在彈出對話框中打印表格?
- 23. 如何在Visual Studio C++中打印整個表格?
- 24. 在PL/SQL中打印記錄字段
- 25. 使用在PL/SQL塊
- 26. 如何在Z3中打印出整個符號表達式?
- 27. 使用php和sql值打印表格
- 28. 匿名塊在Oracle SQL
- 29. 打印Oracle Pl/sql光標
- 30. 如何使用php打印出一個html表格
我怎麼能遞增到光標移動到下一行? – n0ob 2010-02-27 17:53:28
你不需要 - 像上面這樣的隱式遊標會自動獲取下一行,並在沒有更多行要獲取時退出。 – 2010-02-27 23:48:33