通过过程执行查询构建

时间:2012-12-11 10:12:16

标签: oracle plsql

在一个过程中,我首先构建一个查询(select的联合)和DB中的一些数据。 然后我想将查询的结果放在一个文件中,但是当我尝试使用时 execute immediatedbms_sql.execute跟随我构建的查询,没有任何反应。

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

由于

2 个答案:

答案 0 :(得分: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 BLOCK

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

答案 1 :(得分:1)

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

  • 打开游标(打开)
    • 将行添加到变量
    • 当没有更多行时退出
    • 使用变量做任何事情
  • 结束循环