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.