我有一个关于假脱机程序结果的问题。我的示例sql脚本看起来像这样。
whenever sqlerror exit failure rollback
set heading off
set arraysize 1
set newpage 0
set pages 0
set feedback off
set echo off
set verify off
declare
ab varchar2(10) := 'Raj';
cd varchar2(10);
a number := 10;
c number;
d number;
begin
c := a+10;
select ab,c into cd,d from dual;
end;
SPOOL
select cd,d from dual;
SPOOL OFF
EXIT;
上面的脚本不起作用,但我想做这样的事情,在开始结束时我们计算一些值,我想要假设这些结果。
感谢。
答案 0 :(得分:16)
这会将匿名块的输出假脱机到位于本地PC C:驱动器根目录中的output_<YYYYMMDD>.txt
文件中,其中<YYYYMMDD>
是当前日期:
SET SERVEROUTPUT ON FORMAT WRAPPED
SET VERIFY OFF
SET FEEDBACK OFF
SET TERMOUT OFF
column date_column new_value today_var
select to_char(sysdate, 'yyyymmdd') date_column
from dual
/
DBMS_OUTPUT.ENABLE(1000000);
SPOOL C:\output_&today_var..txt
DECLARE
ab varchar2(10) := 'Raj';
cd varchar2(10);
a number := 10;
c number;
d number;
BEGIN
c := a+10;
--
SELECT ab, c
INTO cd, d
FROM dual;
--
DBMS_OUTPUT.put_line('cd: '||cd);
DBMS_OUTPUT.put_line('d: '||d);
END;
SPOOL OFF
SET TERMOUT ON
SET FEEDBACK ON
SET VERIFY ON
PROMPT
PROMPT Done, please see file C:\output_&today_var..txt
PROMPT
希望它有所帮助...
编辑:
在您的注释为光标的每次迭代输出一个值之后(我意识到在这个例子中每个值都是相同的,但你应该得到我正在做的事情的要点):
BEGIN
c := a+10;
--
FOR i IN 1 .. 10
LOOP
c := a+10;
-- Output the value of C
DBMS_OUTPUT.put_line('c: '||c);
END LOOP;
--
END;
答案 1 :(得分:2)
使用假脱机:
set heading off
set arraysize 1
set newpage 0
set pages 0
set feedback off
set echo off
set verify off
variable cd varchar2(10);
variable d number;
declare
ab varchar2(10) := 'Raj';
a number := 10;
c number;
begin
c := a+10;
select ab,c into :cd,:d from dual;
end;
SPOOL
select :cd,:d from dual;
SPOOL OFF
EXIT;
答案 2 :(得分:0)
从BEGIN
END
块进行假脱机非常简单。例如,如果您需要将两个表的结果假脱机到文件中,那么只需使用for loop
即可。示例代码如下。
BEGIN
FOR x IN
(
SELECT COLUMN1,COLUMN2 FROM TABLE1
UNION ALL
SELECT COLUMN1,COLUMN2 FROM TABLEB
)
LOOP
dbms_output.put_line(x.COLUMN1 || '|' || x.COLUMN2);
END LOOP;
END;
/
答案 3 :(得分:-3)
为了在plsql中执行假脱机文件 转到文件 - &gt;新建 - &gt;命令窗口 - &gt;粘贴你的代码 - &gt;执行。到达目录,你会找到该文件。