在一个过程中,我首先使用数据库中的一些数据构建一个查询(选择的联合)。然后我想将查询结果放在一个文件中,但是当我尝试使用
execute immediate
或dbms_sql.execute
遵循我构建的查询时,什么也没发生。
所以我想知道,如何执行这样的查询?
谢谢
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
当从像 SQL*Plus 这样的客户端执行查询时,很容易忘记客户端程序在后台打开一个游标并循环获取每一行。在 PL/SQL 中你必须这样做: