您的存储过程以编码方式工作。问题是最后一行,它无法调用任何一个存储过程。
SQL * Plus中的三个选择是:call,exec和一个匿名的PL / SQL块。
CALL test_sp_1();
匿名PL / SQL块是不在命名过程,函数,触发器等内部的PL / SQL。它可以用于调用您的过程。
BEGIN
test_sp_1;
END;
/
Exec是一个SQL * Plus命令,它是上述匿名块的快捷方式。 EXEC< procedure_name>将作为BEGIN< procedure_name> ;;传递给DB服务器。结束; 完整示例:
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>