Как создать файл спула oracle sql script - PullRequest
8 голосов
/ 21 декабря 2011

У меня есть вопрос о спулинге результатов моей программы.Мой пример сценария 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;

Приведенный выше сценарий не работает, но я хочу сделать что-то вроде этого, когда в начале и конце блока мы вычисляем некоторые значения и я хочу спулингировать эти результаты.

Спасибо.

Ответы [ 4 ]

17 голосов
/ 21 декабря 2011

Это приведет к выводу вывода из анонимного блока в файл с именем output_<YYYYMMDD>.txt, расположенный в корне локального диска 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

Надеюсьпомогает ...

РЕДАКТИРОВАТЬ:

После вашего комментария вывести значение для каждой итерации курсора (я понимаю, что каждое значение будет таким же в этом примере, но вы должны получить сутьчто я делаю):

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; 
2 голосов
/ 21 декабря 2011

с катушкой:

  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;
0 голосов
/ 21 августа 2017

Спулировать из блока 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;
/
0 голосов
/ 20 июня 2012

Для того, чтобы выполнить файл спула в plsql Перейдите в Файл-> Создать-> Командное окно -> Вставьте свой код-> Выполнить. Перейдите в каталог, и вы найдете файл.

...