Вашите съхранени процедури работят като кодирани. Проблемът е с последния ред, той не може да извика нито една от вашите съхранени процедури.
Три възможности за избор в SQL*Plus са:обаждане
, exec
и анонимен PL/SQL блок.
обаждане
изглежда като SQL ключова дума и е документирана в SQL Reference. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Синтаксичната диаграма показва, че парентезата е задължителна, дори когато не са предадени аргументи към рутината за извикване.
CALL test_sp_1();
Анонимен блок PL/SQL е PL/SQL, който не е вътре в наименувана процедура, функция, тригер и т.н. Може да се използва за извикване на вашата процедура.
BEGIN
test_sp_1;
END;
/
Exec
е команда SQL*Plus, която е пряк път за горния анонимен блок. EXEC <име_на_процедура>код> ще бъде предадено на DB сървъра като
BEGIN <име_на_процедура>; КРАЙ;
Пълен пример:
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>