Các thủ tục được lưu trữ của bạn hoạt động như được mã hóa. Vấn đề là với dòng cuối cùng, nó không thể gọi một trong các thủ tục đã lưu trữ của bạn.
Ba lựa chọn trong SQL * Plus là:call
, exec
và một khối PL / SQL ẩn danh.
call
dường như là một từ khóa SQL và được ghi lại trong Tham chiếu SQL. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Sơ đồ cú pháp cho biết rằng dấu ngoặc đơn là bắt buộc, ngay cả khi không có đối số nào được chuyển vào quy trình gọi.
CALL test_sp_1();
Khối PL / SQL ẩn danh là PL / SQL không nằm trong một thủ tục, hàm, trình kích hoạt đã đặt tên, v.v. Nó có thể được sử dụng để gọi thủ tục của bạn.
BEGIN
test_sp_1;
END;
/
Exec
là một lệnh SQL * Plus là một phím tắt cho khối ẩn danh ở trên. EXEC <procedure_name>
sẽ được chuyển đến máy chủ DB dưới dạng BEGIN <procedure_name>; END;
Ví dụ đầy đủ:
SQL> SET SERVEROUTPUT ON
SQL> CREATE OR REPLACE PROCEDURE test_sp
2 AS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE('Test works');
5 END;
6 /
Procedure created.
SQL> CREATE OR REPLACE PROCEDURE test_sp_1
2 AS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE('Testing');
5 test_sp;
6 END;
7 /
Procedure created.
SQL> CALL test_sp_1();
Testing
Test works
Call completed.
SQL> exec test_sp_1
Testing
Test works
PL/SQL procedure successfully completed.
SQL> begin
2 test_sp_1;
3 end;
4 /
Testing
Test works
PL/SQL procedure successfully completed.
SQL>