Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Pembuatan spool berbasis kondisi dalam skrip Oracle SQL

Jika Anda dapat menempatkan bagian pengontrol ini ke dalam skripnya sendiri, mis. elcm_ctl.sql , Anda bisa membuatnya:

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 perintah sedikit lebih rapi daripada mengandalkan petunjuk substitusi, menurut pendapat saya, dan agak mendokumentasikan diri sendiri. Ini meminta pengguna dengan string yang ditentukan, bukan hanya 'gen' . (Dalam SQL*Plus Anda dapat memperluas ini dan memaksa pengguna untuk memasukkan satu karakter, meminta kembali jika mereka memasukkan sesuatu yang lebih panjang; dan default ke 'N' jika mereka hanya menekan kembali tanpa memasukkan apa pun. Tetapi Pengembang SQL hanya mendukung bagian dari fungsi).

Kemudian blok anonim kecil melempar pengecualian - tidak masalah yang mana - jika nilai variabel yang dimasukkan bukan 'y' atau 'Y' . Saat melakukan itu, saya telah set termout off jadi Anda tidak melihat pengecualian yang sebenarnya. Dan saya telah menggunakan whenever sqlerror untuk membuat skrip keluar ketika pengecualian itu dimunculkan, jadi apa pun yang datang nanti tidak dijalankan. Itu adalah hal lain dalam skrip kontrol, bukan hanya kueri berikutnya, tetapi Anda dapat memiliki beberapa sub-skrip jika perlu lebih fleksibel.

Tapi di SQL Developer, termout hanya berfungsi seperti yang diharapkan ketika Anda menjalankan melalui @ . Jika Anda menjalankan konten elcm_ctl.sql langsung dari Lembar Kerja SQL Anda akan melihat pengecualian dimunculkan, yang agak jelek. Jadi, alih-alih simpan skrip kontrol itu dan di lembar kerja kosong lakukan saja:

@c:\elcm_ctl.sql

Jalankan lembar kerja itu sebagai skrip dan itu akan meminta Anda; jika Anda memasukkan 'Y' Anda akan melihat keluaran skrip di jendela keluaran skrip (kecuali jika Anda membiarkan set termout off dalam skrip kontrol), dan itu akan membuat file spool. Jika Anda memasukkan yang lain maka itu tidak akan menjalankan elcm.sql file, tidak akan menampilkan apa pun di jendela keluaran skrip, dan tidak akan membuat file spool.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JDBC ResultSet getDate kehilangan presisi

  2. Bagaimana caranya:Grails 3.0.2 + Oracle Database 12c?

  3. Bagaimana saya mengingat ke arah mana SEBELUM harus pergi di CONNECT BY query

  4. Pemecahan masalah kesalahan Oracle Form Builder FRM-10044

  5. cara mentransfer data CLOB dari satu database ke database ORACLE jarak jauh lainnya yang memiliki DBLinks