简体   繁体   English

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

[英]How to create a oracle sql script spool file

I have a question about spooling the the results of my program. 我有一个关于假脱机程序结果的问题。 My sample sql script looks like this. 我的示例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;

The above script does not work, but I want to do something like this where in the begin end block we compute some values and i want to spool those results. 上面的脚本不起作用,但我想做这样的事情,在开始结束块我们计算一些值,我想假设这些结果。

Thanks. 谢谢。

This will spool the output from the anonymous block into a file called output_<YYYYMMDD>.txt located in the root of the local PC C: drive where <YYYYMMDD> is the current date: 这会将匿名块的输出假脱机到名为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

Hope it helps... 希望能帮助到你...

EDIT: 编辑:

After your comment to output a value for every iteration of a cursor (I realise each value will be the same in this example but you should get the gist of what i'm doing): 在您的注释为光标的每次迭代输出一个值之后(我意识到在这个例子中每个值都是相同的,但你应该得到我正在做的事情的要点):

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; 

With spool: 使用线轴:

  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;

To spool from a BEGIN END block is pretty simple. BEGIN END块进行假脱机非常简单。 For example if you need to spool result from two tables into a file, then just use the for loop . 例如,如果您需要将两个表的结果假脱机到文件中,那么只需使用for loop Sample code is given below. 示例代码如下。

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;
/

In order to execute a spool file in plsql Go to File->New->command window -> paste your code-> execute. 为了在plsql中执行假脱机文件,请转到文件 - >新建 - >命令窗口 - >粘贴代码 - >执行。 Got to the directory and u will find the file. 到达目录,你会找到该文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM