Nếu bạn có thể đặt phần kiểm soát này vào tập lệnh riêng của nó, ví dụ:elcm_ctl.sql
, bạn có thể thực hiện điều đó:
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
lệnh
Theo tôi, gọn gàng hơn một chút so với việc dựa vào lời nhắc thay thế, và có phần tự ghi lại. Điều này sẽ nhắc người dùng với chuỗi được chỉ định, thay vì chỉ 'gen'
. (Trong SQL * Plus, bạn có thể mở rộng điều này và buộc người dùng phải nhập một ký tự duy nhất, nhắc lại nếu họ nhập thêm bất cứ thứ gì; và mặc định là 'N' nếu họ chỉ nhấn return mà không nhập bất kỳ thứ gì. Nhưng SQL Developer chỉ hỗ trợ một tập hợp con của chức năng).
Sau đó, một khối ẩn danh nhỏ ném một ngoại lệ - không thực sự quan trọng là cái nào - nếu giá trị biến đã nhập không phải là 'y'
hoặc 'Y'
. Trong khi nó đang hoạt động, tôi đã set termout off
vì vậy bạn không thấy ngoại lệ thực tế. Và tôi đã sử dụng whenever sqlerror
để thoát tập lệnh khi ngoại lệ đó được nâng lên, vì vậy bất cứ điều gì đến sau sẽ không được chạy. Đó là mọi thứ khác trong tập lệnh điều khiển, không chỉ là truy vấn tiếp theo, mà bạn có thể có một số tập lệnh con nếu bạn cần để linh hoạt hơn.
Nhưng trong SQL Developer, termout
chỉ hoạt động như mong đợi khi bạn chạy qua @
. Nếu bạn chạy nội dung của elcm_ctl.sql
trực tiếp từ Bảng tính SQL, bạn sẽ thấy ngoại lệ được đưa ra, điều này hơi xấu. Vì vậy, thay vào đó, hãy lưu tập lệnh điều khiển đó và trong một trang tính trống, chỉ cần thực hiện:
@c:\elcm_ctl.sql
Thực thi trang tính đó dưới dạng tập lệnh và nó sẽ nhắc bạn; nếu bạn nhập 'Y'
bạn sẽ thấy đầu ra của tập lệnh trong cửa sổ xuất tập lệnh (trừ khi bạn để set termout off
trong tập lệnh điều khiển), và nó sẽ tạo tệp cuộn. Nếu bạn nhập bất kỳ thứ gì khác thì nó sẽ không chạy elcm.sql
tệp, sẽ không hiển thị bất kỳ thứ gì trong cửa sổ xuất tập lệnh và sẽ không tạo tệp cuộn.