Ако можете да поставите този контролен раздел в негов собствен скрипт, напр. 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', ако просто натисне return, без да въвежда нищо. Но 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
файл, няма да покаже нищо в прозореца за извеждане на скрипта и няма да създаде спул файл.