Сценарий Oracle SQL - почему спул создает файл дважды

Я запускаю следующий SQL-скрипт с помощью Oracle SQL Developer. Я не знаю, почему он создает два файла спула, а также отображает все операции в консоли Oracle SQL Developer, чего не должно быть. Возможно, это связано с SET FEEDBACK ON и SET FEEDBACK OFF для каждого оператора удаления.

Он создает два файла и отображает все в выводе скрипта только тогда, когда есть записи для удаления.

Вызов скрипта

@"C:\RM.sql"

Сценарий

SET PAGES 0
SET LINESIZE 10000
SET TRIMS ON
SET ECHO OFF
SET HEADING ON
SET VERIFY OFF
SET FEEDBACK OFF
SET TERMOUT OFF
SET SERVEROUTPUT on size 1000000
SET TIMING OFF
SET COLSEP '|'

alter session set NLS_DATE_FORMAT = 'dd.mm.yyyy hh24:mi:ss';

whenever oserror exit -1
whenever sqlerror exit -2

-- The current timestamps into 'times' variable
column times new_value times noprint
select to_char(sysdate, 'YYYYMMDD_HH24MISS') times from DUAL; 

-- variables definition
define output_file="C:\temp\filename_&times..log"

-- echo some text to the standard output
SET TERMOUT ON
PROMPT
PROMPT "The script counts and reports the records to be deleted..."
PROMPT
SET TERMOUT OFF

-- write the results to the 'output_file' file
spool &output_file

PROMPT
PROMPT "BEGIN------------------------------"
PROMPT "delete from the_table1"
select 'Total records BEFORE delete: ' || count (*) as count_records from the_table1;

SET FEEDBACK ON
PROMPT "Actual deletion of records..."
delete from the_table1;
commit;
SET FEEDBACK OFF
PROMPT "END------------------------------"

PROMPT
PROMPT "BEGIN------------------------------"
PROMPT "delete from the_table2"
select 'Total records BEFORE delete: ' || count (*) as count_records from the_table2;

SET FEEDBACK ON
PROMPT "Actual deletion of records..."
delete from the_table2;
commit;
SET FEEDBACK OFF
PROMPT "END------------------------------"

PROMPT
PROMPT "The script completed..."

SPOOL OFF

SET TERMOUT ON
PROMPT
PROMPT "&output_file has been successfully ended."
PROMPT
PROMPT

EXIT
;

person Sherzad    schedule 10.08.2020    source источник
comment
Я только что запустил этот сценарий с помощью SQL Developer версии 20.2, и только один файл журнала был SPOOLed/создан.   -  person thatjeffsmith    schedule 10.08.2020
comment
то же самое здесь, только один файл. Кстати, если вы удаляете всю таблицу, разве вы не должны просто обрезать ее?   -  person Roberto Hernandez    schedule 10.08.2020
comment
@thatjeffsmith спасибо за ваш отзыв. Я не знаю, почему я не могу воспроизвести это сейчас.   -  person Sherzad    schedule 12.08.2020
comment
@RobertoHernandez спасибо за ваш отзыв. Я не знаю, почему я не могу воспроизвести его больше.   -  person Sherzad    schedule 12.08.2020
comment
@Sherzad, можете ли вы предоставить в своем вопросе результат выполнения вашего скрипта, который показывает, что на самом деле он создает два файла очереди?   -  person Roberto Hernandez    schedule 12.08.2020


Ответы (1)


Кажется, я припоминаю, что параметры TERMOUT и ECHO зависят от того, как запускается sqlplus, и могут давать разные результаты, похожие на то, что вы видите.

Я использую sqlplus в качестве примера того, как взаимодействие со средой выполнения может повлиять на вывод. На самом деле это не ответ, и я не могу воспроизвести сценарии, которые я часто видел, но я надеюсь, что следующее, возможно, предложит некоторые указатели на то, с чем можно столкнуться.

Начните с простого тестового сценария test_off.sql:

set echo off
set termout off

prompt text1

spool f1.txt
prompt text2
spool off
prompt text 3
quit

Теперь давайте запустим его несколькими способами:

1 Неинтерактивная параметризация

$ sqlplus -S un/pw@idb @test_off.sql


$ cat f1.txt
text2

Нет вывода на экран, создан буферный файл, содержащий только содержимое буфера.

<сильный>2. Интерактивно

$ sqlplus -S un/pw/@db
@test_off.sql
$ cat f1.txt
text2

Нет вывода на экран, создан буферный файл, содержащий только содержимое буфера.

<сильный>3. Запускать как конвейерную подачу

$ cat test_off.sql | sqlplus -S un/pw@db
text1
text2
text 3

Здесь мы видим все результаты команды PROMPT на экране.

Подобные эффекты можно увидеть, если запустить в блоке HEREDOC.

Я определенно видел (в более старых версиях) некоторые странные несоответствия, и, возможно, ваш разработчик SQL страдает аналогичным образом.

person TenG    schedule 10.08.2020
comment
Спасибо за информацию. К сожалению, я не могу воспроизвести проблему, к которой обращался. - person Sherzad; 12.08.2020