如何创建oracle sql脚本假脱机文件

use*_*900 8 oracle plsql spool sql-scripts

我有一个关于假脱机程序结果的问题.我的示例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;
Run Code Online (Sandbox Code Playgroud)

上面的脚本不起作用,但我想做这样的事情,在开始结束块我们计算一些值,我想假设这些结果.

谢谢.

Oll*_*lie 17

这会将匿名块的输出假脱机到output_<YYYYMMDD>.txt位于本地PC C:驱动器根目录的文件中,其中<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
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你...

编辑:

在您的注释为光标的每次迭代输出一个值之后(我意识到在这个例子中每个值都是相同的,但你应该得到我正在做的事情的要点):

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; 
Run Code Online (Sandbox Code Playgroud)

  • 如果你在后台运行它,我会担心你期望输出的去向.在这些情况下,您可能最好使用UTL_FILE包将输出直接从PL/SQL块中写入文件,然后您可以使用您想要的任何工具(PL/SQL,Java,UNIX等)读取该文件. ).这很简单,你的复杂性比通过SQLPlus然后转换到shell脚本等更简单.http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_file.htm (2认同)