sql >> Database teknologi >  >> RDS >> Oracle

Betingelsesbaseret spoolgenerering i Oracle SQL-script

Hvis du kan sætte denne kontrollerende sektion ind i sit eget script, f.eks. elcm_ctl.sql , du kunne gøre det:

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

accepterer kommando er en smule pænere end at stole på substitutionsprompter, efter min mening, og er noget selvdokumenterende. Dette beder brugeren om den angivne streng i stedet for kun 'gen' . (I SQL*Plus kan du udvide dette og tvinge brugeren til at indsætte et enkelt tegn, og spørge igen, hvis de sætter noget længere ind; og standard til 'N', hvis de bare trykker på retur uden at indtaste noget. Men SQL Developer understøtter kun en delmængde af funktionaliteten).

Så kaster en lille anonym blok en undtagelse - er lige meget hvilken - hvis den indtastede variabelværdi ikke er 'y' eller 'Y' . Mens den gør det, har jeg indstillet termin fra så du kan ikke se den egentlige undtagelse. Og jeg har brugt whenever sqlerror at få scriptet til at afslutte, når den undtagelse er rejst, så det, der kommer senere, ikke køres. Det er alt andet i kontrolscriptet, ikke kun den næste forespørgsel, men du kunne have flere underscripts, hvis du skulle være mere fleksibel.

Men i SQL Developer, termout virker kun som forventet, når du kører via @ . Hvis du kører indholdet af elcm_ctl.sql direkte fra SQL-regnearket vil du se undtagelsen blive rejst, hvilket er lidt grimt. Så gem i stedet det kontrolscript, og gør bare:

i et tomt regneark
@c:\elcm_ctl.sql

Udfør det regneark som et script, og det vil bede dig om; hvis du indtaster 'Y' du vil se outputtet af scriptet i script-outputvinduet (medmindre du forlader set termout fra i kontrolscriptet), og det vil oprette spoolfilen. Hvis du indtaster noget andet, vil det ikke køre elcm.sql fil, vil ikke vise noget i script-outputvinduet og vil ikke oprette en spool-fil.




  1. Få data fra en bestemt bruger i PHP

  2. Udtræk xml-data ved hjælp af oracle-forespørgsel

  3. jQuery Valider fjernmetodebrug for at kontrollere, om brugernavnet allerede eksisterer

  4. Sekvenser med sammensat primærnøgle