Oracle
 sql >> база данни >  >> RDS >> Oracle

Генериране на макара на базата на условия в Oracle SQL скрипт

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Задаване на езикови параметри на Oracle за DG4ODBC

  2. Ограничаване на знаците, върнати в Oracle sql заявка

  3. Необходим е пример за съхранена процедура на Oracle за масив (таблица).

  4. Как да извлека само стойност на датата от полето за дата в Oracle?

  5. Таблица, извлечена от Oracle sql - незадължително псевдоним