sql >> Databáze >  >> RDS >> Oracle

Generování zařazování podle podmínek ve skriptu Oracle SQL

Pokud můžete tuto ovládací sekci vložit do vlastního skriptu, např. elcm_ctl.sql , můžete to udělat:

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 příkaz je podle mého názoru o něco úhlednější než spoléhání na substituční výzvy a je poněkud samodokumentující. Tím se uživateli vyzve zadaný řetězec, nikoli pouze 'gen' . (V SQL*Plus to můžete rozšířit a donutit uživatele, aby vložil jeden znak, znovu se zobrazí výzva, pokud vloží něco delšího; a výchozí na 'N', pokud pouze stiskne návrat bez zadávání čehokoli. Ale SQL Developer podporuje pouze podmnožinu funkcí).

Potom malý anonymní blok vyvolá výjimku - nezáleží na tom, která z nich - pokud zadaná hodnota proměnné není 'y' nebo 'Y' . Zatímco to dělá, nastavil jsem set termout off takže skutečnou výjimku nevidíte. A použil jsem whenever sqlerror aby se skript ukončil, když je tato výjimka vyvolána, takže cokoli přijde později, nebude spuštěno. To je vše ostatní v řídicím skriptu, nejen další dotaz, ale pokud potřebujete být flexibilnější, můžete mít několik dílčích skriptů.

Ale v SQL Developer, termout funguje podle očekávání pouze při spuštění přes @ . Pokud spustíte obsah elcm_ctl.sql přímo z listu SQL uvidíte výjimku vyvolanou, což je trochu ošklivé. Takže místo toho uložte řídicí skript a v prázdném listu proveďte:

@c:\elcm_ctl.sql

Spusťte tento list jako skript a zobrazí se výzva; pokud zadáte 'Y' výstup skriptu uvidíte v okně výstupu skriptu (pokud nenecháte set termout off v řídicím skriptu) a vytvoří soubor pro souběžný tisk. Pokud zadáte cokoliv jiného, ​​nespustí elcm.sql soubor, nezobrazí nic v okně výstupu skriptu a nevytvoří soubor pro souběžný tisk.




  1. Typy tabulkových vztahů v MS Access

  2. PyMySQL pomocí nekoherentního chování localhost vs socket

  3. Otevřete modální dialog přes JavaScript Oracle APEX

  4. Jak získat další sloupce, které nejsou v klauzuli GROUP BY v oracle select sql?