0

在一个过程中,我首先使用数据库中的一些数据构建一个查询(选择的联合)。然后我想将查询结果放在一个文件中,但是当我尝试使用 execute immediatedbms_sql.execute遵循我构建的查询时,什么也没发生。

所以我想知道,如何执行这样的查询?

谢谢

4

2 回答 2

2
SET SERVEROUTPUT ON;
SPOOL TEST.TXT

DECLARE
   test_cur   SYS_REFCURSOR;
   v_date     DATE;
BEGIN
   OPEN test_cur FOR 'SELECT SYSDATE FROM DUAL';

   FETCH test_cur INTO   v_date;

   CLOSE test_cur;

   DBMS_OUTPUT.put_line ('DATE IS ' || v_date);
END;

SPOOL OFF

DATE IS 11-DEC-12
PL/SQL procedure successfully completed.

或直接不使用 PLSQL 块

SET SERVEROUTPUT ON;
SPOOL TEST.TXT
SELECT SYSDATE FROM DUAL;
SPOOL OFF

SYSDATE  
---------
11-DEC-12
1 row selected.

编辑

SET SERVEROUTPUT ON;
SPOOL TEST.TXT

DECLARE
  CURSOR  test_cur   
   IS SELECT * FROM XYZ;
BEGIN
   FOR v_test_row IN test_cur;
   LOOP
    DBMS_OUTPUT.put_line ('XXXYYYY ' || v_test_row .<your column name>);
   END LOOP;

END;

SPOOL OFF
于 2012-12-11T10:39:17.180 回答
1

当从像 SQL*Plus 这样的客户端执行查询时,很容易忘记客户端程序在后台打开一个游标并循环获取每一行。在 PL/SQL 中你必须这样做:

  • 打开游标(打开)
  • 环形
    • 将一行提取到变量中
    • 没有更多行时退出
    • 对变量做任何事情
  • 结束循环
于 2012-12-11T10:23:43.363 回答