我想使用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