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

Chạy SCRIPT từ PL / SQL Block

Đó là 2012 2017. Các kịch bản là một sự nôn nao khó hiểu và dễ vỡ từ thiên niên kỷ trước. Oracle có một loạt chức năng tuyệt vời mà chúng ta có thể thực thi trong PL / SQL, ngoài ra còn có các Quy trình được lưu trữ trong Java và có lập lịch để bắt đầu công việc. Ngoài việc chạy DDL để tạo hoặc sửa đổi các lược đồ, hầu như không cần đến các tập lệnh trong môi trường cơ sở dữ liệu Oracle; thậm chí các tập lệnh DDL phải được kích hoạt từ một máy khách bên ngoài, có thể là một công cụ xây dựng chẳng hạn như TeamCity.

Đặc biệt, tôi coi việc cố gắng chạy tập lệnh SQL từ chương trình PL / SQL là một lỗi kiến ​​trúc. Bạn đang làm gì với tập lệnh mà bạn không thể làm với thủ tục được lưu trữ?

Đối với việc chuyển đầu vào cho một thủ tục được lưu trữ, đó là những gì tham số dành cho. PL / SQL không tương tác, chúng tôi cần một ứng dụng khách để nhập các giá trị. Tùy thuộc vào tình huống, điều này có thể được thực hiện không đồng bộ (giá trị trong tệp hoặc bảng) hoặc đồng bộ (gọi thủ tục được lưu trữ từ SQL * Plus, SQL Developer hoặc giao diện người dùng riêng).

Đã nói tất cả những điều đó, trong thế giới thực, chúng tôi làm việc với những kiến ​​trúc lộn xộn với sự phụ thuộc lẫn nhau giữa cơ sở dữ liệu và hệ điều hành bên ngoài. Vậy chúng ta có thể làm gì?

  1. Chúng ta có thể viết một Thủ tục được lưu trữ trong Java để thực thi các lệnh shell. Đây là giải pháp đáng tin cậy, đã có từ thời Oracle 8i. Tìm hiểu thêm.
  2. Trong 10g Oracle thay thế DBMS_JOB bằng DBMS_SCHEDULER. Một trong những cải tiến của công cụ này là khả năng chạy các công việc bên ngoài, tức là các tập lệnh shell. Tìm hiểu thêm.
  3. Vì các bảng bên ngoài Oracle 11g R1 hỗ trợ các tập lệnh tiền xử lý, các tập lệnh này chạy các lệnh shell trước khi truy vấn bảng. Tìm hiểu thêm.

Lưu ý rằng tất cả các tùy chọn này đều yêu cầu quyền truy cập cao hơn (cấp cho các đối tượng DIRECTORY, thông tin xác thực bảo mật, v.v.). Chúng chỉ có thể được cấp bởi những người dùng đặc quyền (tức là DBA). Trừ khi cơ sở dữ liệu của chúng tôi có cấu hình bảo mật lỏng lẻo đáng kinh ngạc, không có cách nào để chúng tôi chạy một tập lệnh shell tùy ý từ PL / SQL.

Cuối cùng, không rõ bạn mong đợi lợi ích gì từ việc chạy một tập lệnh SQL trong PL / SQL. Hãy nhớ rằng PL / SQL chạy trên máy chủ cơ sở dữ liệu, vì vậy nó không thể nhìn thấy các tập lệnh trên máy khách . Điều này có vẻ phù hợp với yêu cầu chấp nhận đầu vào của người dùng.

Có lẽ giải pháp đơn giản nhất là cấu hình lại tập lệnh gốc. Tách lệnh gọi PL / SQL cần thiết thành một khối và sau đó chỉ cần gọi tập lệnh có tên:

begin
   proc(para1,para2);
end;
/   
@prompt1.sql


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối với Cơ sở dữ liệu Oracle 12c từ Phiên bản Cộng đồng Tích hợp Dữ liệu Pentaho (Kettle)

  2. Làm thế nào để chèn / cập nhật kích thước lớn hơn của dữ liệu trong bảng Oracle?

  3. Làm cách nào để xóa các bản sao khỏi danh sách được phân tách bằng dấu cách bởi Oracle regexp_replace?

  4. ĐẶT SQLBLANKLINES:Cách Cho phép Dòng trống trong SQLcl &SQL * Plus

  5. Trình điều khiển Oracle thay thế cho .net