Если вы можете поместить этот управляющий раздел в свой собственный сценарий, например. elcm_ctl.sql
, можно сделать так:
accept run_it char format a1 prompt "Run the script?"
set termout off
whenever sqlerror exit success rollback
exec if upper(nvl('&run_it', 'N')) != 'Y' then raise no_data_needed; end if;
whenever sqlerror continue
spool c:\elcm.sql
select 'select sysdate from dual;' from dual;
spool off
set termout on
spool c:\elcm_details.spl
@c:\elcm.sql
spool off
Команда accept
немного лучше, чем полагаться на подстановку подсказывает, на мой взгляд, и несколько самодокументируется. Это запрашивает у пользователя указанную строку, а не просто 'gen'
. (В SQL * Plus вы можете расширить это и заставить пользователя вводить один символ, повторно запрашивая, если они вводят что-то более длинное, и по умолчанию «N», если они просто нажимают клавишу возврата, ничего не вводя. Но SQL Developer поддерживает только часть функциональности).
Затем небольшой анонимный блок выдает исключение — неважно какое, — если введенное значение переменной не равно 'y'
или 'Y'
. Пока это происходит, я set termout off
так вы не видите фактического исключения. И я использовал whenever sqlerror
, чтобы заставить скрипт выйти когда возникает это исключение, поэтому все, что приходит позже, не запускается. Это все остальное в сценарии управления, а не только следующий запрос, но у вас может быть несколько подскриптов, если вам нужно быть более гибким.
Но в SQL Developer termout
работает должным образом только при запуске через @
. Если вы запустите содержимое elcm_ctl.sql
непосредственно из рабочего листа SQL, вы увидите возбуждаемое исключение, что немного уродливо. Поэтому вместо этого сохраните этот управляющий скрипт и на пустом листе просто выполните:
@c:\elcm_ctl.sql
Выполните этот рабочий лист как сценарий, и он предложит вам; если вы введете 'Y'
, вы увидите выходные данные скрипта в окне вывода скрипта (если вы не оставите set termout off
в управляющем скрипте), и будет создан файл спула. Если вы введете что-нибудь еще, он не запустит файл elcm.sql
, ничего не покажет в окне вывода скрипта и не создаст буферный файл.
person
Alex Poole
schedule
27.06.2014