Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Generowanie bufora na podstawie warunków w skrypcie Oracle SQL

Jeśli możesz umieścić tę sekcję kontrolującą w jej własnym skrypcie, np. elcm_ctl.sql , możesz to zrobić:

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 polecenie moim zdaniem jest trochę schludniejsze niż poleganie na podpowiedziach zastępowania i jest nieco samodokumentujące. To monituje użytkownika o określony ciąg, a nie tylko 'gen' . (W SQL*Plus możesz rozszerzyć to i zmusić użytkownika do wpisania pojedynczego znaku, ponownie pytając, jeśli wprowadzi coś dłuższego; i domyślnie na 'N', jeśli po prostu naciśnie return bez wprowadzania czegokolwiek. Ale SQL Developer obsługuje tylko podzbiór funkcjonalności).

Następnie mały anonimowy blok zgłasza wyjątek — nie ma znaczenia który — jeśli wprowadzona wartość zmiennej nie jest 'y' lub 'Y' . Podczas gdy to robi, ustawiłem set termout off więc nie widzisz faktycznego wyjątku. I używałem whenever sqlerror aby skrypt zakończył działanie, gdy zostanie zgłoszony ten wyjątek, więc cokolwiek nadejdzie później, nie zostanie uruchomione. To wszystko inne w skrypcie sterującym, nie tylko następne zapytanie, ale możesz mieć kilka skryptów podrzędnych, jeśli potrzebujesz większej elastyczności.

Ale w SQL Developer, termout działa tylko zgodnie z oczekiwaniami, gdy uruchamiasz przez @ . Jeśli uruchomisz zawartość elcm_ctl.sql bezpośrednio z arkusza SQL zobaczysz wyjątek, który jest nieco brzydki. Więc zamiast tego zapisz ten skrypt sterujący i w pustym arkuszu po prostu wykonaj:

@c:\elcm_ctl.sql

Uruchom ten arkusz jako skrypt, a wyświetli się monit; jeśli wpiszesz 'Y' zobaczysz wyjście skryptu w oknie wyjścia skryptu (chyba że zostawisz set termout off w skrypcie sterującym) i utworzy plik buforowy. Jeśli wpiszesz cokolwiek innego, nie uruchomi elcm.sql pliku, nie pokaże niczego w oknie wyjściowym skryptu i nie utworzy pliku buforowania.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie zwracające :ORA-01427 Jednowierszowe podzapytanie zwracające więcej niż jeden wiersz

  2. Format daty strefy czasowej w Oracle

  3. Jak działa zawiera() w PL-SQL?

  4. Czy istnieje sposób na odtworzenie pakietu ODI przy użyciu scenariusza ODI?

  5. Czy mogę tutaj skorzystać z funkcji analitycznej Oracle?