Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tạo ống đệm dựa trên điều kiện trong tập lệnh SQL SQL

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL so sánh ngày tháng

  2. Tại sao Oracle varchar2 có kích thước bắt buộc làm tham số định nghĩa?

  3. cách thực hiện nhiều truy vấn oracle c #

  4. Ký tự thoát pl-sql trong Oracle (cho a ')

  5. Lỗi (5,3):PLS-00103:Gặp phải biểu tượng BEGIN khi mong đợi một trong những điều sau:ngôn ngữ