Oracle sqlplus内部的调用过程
我使用的是sqlplus代码和plsql,我在plsql中的过程工作得很好,但当我在sqlplus中执行过程时,我会遇到一些错误报告。 这是我的密码:Oracle sqlplus内部的调用过程,oracle,plsql,Oracle,Plsql,我使用的是sqlplus代码和plsql,我在plsql中的过程工作得很好,但当我在sqlplus中执行过程时,我会遇到一些错误报告。 这是我的密码: set serveroutput on; DECLARE ENDDATE DATE; BEGIN SELECT SOME_DATE INTO ENDDATE FROM HEADER WHERE ID=1182446; IF ENDDATE >= TO_DATE('18-MAY-13') THEN EXECUTE SOMEPROCE
set serveroutput on;
DECLARE
ENDDATE DATE;
BEGIN
SELECT SOME_DATE INTO ENDDATE FROM HEADER WHERE ID=1182446;
IF ENDDATE >= TO_DATE('18-MAY-13') THEN
EXECUTE SOMEPROCEDURE(1182446);
END IF;
END;
Error report -
ORA-06550: line 8, column 8:
PLS-00103: Encountered the symbol "SOMEPROCEDURE" when expecting one of the following:
:= . ( @ % ;
The symbol ":=" was substituted for "SOMEPROCEDURE" to continue.
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
由于您是在一个匿名PL/SQL块中调用该过程,因此不需要执行
命令,因为它是一个SQL*Plus命令,而不是PL/SQL
您可以简单地将该过程称为:
IF ENDDATE >= TO_DATE('18-MAY-13') THEN
SOMEPROCEDURE(1182446);
END IF;
如果希望在SQL*Plus中单独执行该过程,则可以使用execute或EXEC命令
比如说,
在SQL*Plus中:
SQL> CREATE OR REPLACE
2 PROCEDURE get_emp(
3 emp_no IN emp.empno%type,
4 dept_no OUT emp.deptno%type )
5 AS
6 BEGIN
7 SELECT deptno INTO dept_no FROM emp WHERE empno = emp_no;
8 END;
9 /
Procedure created.
SQL> var dno number
SQL> var eno number
SQL> exec :eno := 7369
PL/SQL procedure successfully completed.
SQL> EXEC get_emp(:eno, :dno);
PL/SQL procedure successfully completed.
SQL> print dno
DNO
----------
20
SQL>
SQL> set serveroutput on
SQL> DECLARE
2 dt DATE;
3 dept_no NUMBER;
4 BEGIN
5 SELECT hiredate INTO dt FROM emp WHERE empno = 7369;
6 IF dt < SYSDATE THEN
7 get_emp(7369, dept_no);
8 DBMS_OUTPUT.PUT_LINE('Department number is '||dept_no);
9 END IF;
10 END;
11 /
Department number is 20
PL/SQL procedure successfully completed.
如果要在另一个PL/SQL块内调用该过程,可以按以下方式执行:
匿名PL/SQL块:
SQL> CREATE OR REPLACE
2 PROCEDURE get_emp(
3 emp_no IN emp.empno%type,
4 dept_no OUT emp.deptno%type )
5 AS
6 BEGIN
7 SELECT deptno INTO dept_no FROM emp WHERE empno = emp_no;
8 END;
9 /
Procedure created.
SQL> var dno number
SQL> var eno number
SQL> exec :eno := 7369
PL/SQL procedure successfully completed.
SQL> EXEC get_emp(:eno, :dno);
PL/SQL procedure successfully completed.
SQL> print dno
DNO
----------
20
SQL>
SQL> set serveroutput on
SQL> DECLARE
2 dt DATE;
3 dept_no NUMBER;
4 BEGIN
5 SELECT hiredate INTO dt FROM emp WHERE empno = 7369;
6 IF dt < SYSDATE THEN
7 get_emp(7369, dept_no);
8 DBMS_OUTPUT.PUT_LINE('Department number is '||dept_no);
9 END IF;
10 END;
11 /
Department number is 20
PL/SQL procedure successfully completed.
SQL>打开服务器输出
SQL>声明
2日;
3部门编号;
4开始
5从emp中选择hiredate进入dt,其中empno=7369;
6如果dt<系统日期,则
7获得环境管理计划(7369,部门编号);
8 DBMS|U输出。PUT|U行('部门编号为'| |部门编号);
9如果结束,则结束;
10结束;
11 /
部门号码是20
PL/SQL过程已成功完成。
过程名称前面不需要EXECUTE
。只需删除EXECUTE
。请参阅@LalitKumarB的答案。@KyrieEXECUTE
是一个SQL*Plus
命令,而不是PL/SQL
命令。