sql >> Databasteknik >  >> RDS >> Oracle

Tillståndsbaserad spoolgenerering i Oracle SQL-skript

Om du kan lägga in den här kontrollerande sektionen i ett eget skript, t.ex. elcm_ctl.sql , du kan göra 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

accepterar kommando är lite snyggare än att förlita sig på substitutionsuppmaningar, enligt min mening, och är något självdokumenterande. Detta uppmanar användaren med den angivna strängen, snarare än bara 'gen' . (I SQL*Plus kan du utöka detta och tvinga användaren att lägga in ett enstaka tecken, och fråga igen om de lägger in något längre; och standard till 'N' om de bara trycker på retur utan att ange något. Men SQL Developer stöder bara en delmängd av funktionaliteten).

Sedan kastar ett litet anonymt block ett undantag - spelar ingen roll vilket - om det angivna variabelvärdet inte är 'y' eller 'Y' . Medan det gör det har jag ställt in termin av så du ser inte själva undantaget. Och jag har använt när sqlerror för att få skriptet att avslutas när det undantaget höjs, så att det som kommer senare inte körs. Det är allt annat i kontrollskriptet, inte bara nästa fråga, utan du kan ha flera underskript om du behövde vara mer flexibel.

Men i SQL Developer, termout fungerar bara som förväntat när du kör via @ . Om du kör innehållet i elcm_ctl.sql direkt från SQL-arbetsbladet ser du att undantaget höjs, vilket är lite fult. Så istället spara det kontrollskriptet och i ett tomt kalkylblad gör bara:

@c:\elcm_ctl.sql

Kör det kalkylbladet som ett skript och det kommer att fråga dig; om du anger 'Y' du kommer att se utdata från skriptet i skriptutdatafönstret (om du inte lämnar set termout off i kontrollskriptet), och det skapar spoolfilen. Om du anger något annat kommer det inte att köra elcm.sql fil, kommer inte att visa någonting i skriptutmatningsfönstret och kommer inte att skapa en spoolfil.




  1. Felkod:1062. Dubblettpost '1' för nyckel 'PRIMÄR'

  2. SQL Server:GROUP BY-sats för att få kommaseparerade värden

  3. Behöver en sql-fråga för att hitta inlägg med flest kommenterade ordning efter antal kommentarer/antal DESC

  4. Välj alla kolumner från tabell 1 och en kolumn från tabell två som är grupperad efter?