Oracle:第 28 行错误:PLS-00103:遇到符号“文件结束”
Oracle : Error at line 28: PLS-00103: Encountered the symbol “end-of-file”
我有一个问题,我想不通。它显示....
Error at line 28: PLS-00103: Encountered the symbol "end-of-file" when
expecting one of the following:
begin end function pragma procedure
- CREATE OR REPLACE PACKAGE BODY check_emp_pkg
- IS
- PROCEDURE chk_hiredate
- (p_date IN employees.hire_date%TYPE)
下面是我的代码:
CREATE OR REPLACE PACKAGE BODY check_emp_pkg
IS
PROCEDURE chk_hiredate
(p_date IN employees.hire_date%TYPE)
IS BEGIN
IF MONTHS_BETWEEN(SYSDATE, p_date) > g_max_length_of_service * 12 THEN
RAISE_APPLICATION_ERROR(-20200, 'Invalid Hiredate');
END IF;
END chk_hiredate;
PROCEDURE chk_dept_mgr
(p_empid IN employees.employee_id%TYPE,
p_mgr IN employees.manager_id%TYPE)
IS BEGIN
DECLARE
v_mgr_id departments.manager_id%TYPE;
BEGIN
SELECT manager_id INTO v_mgr_id
FROM departments;
IF p_mgr = v_mgr_id THEN
DBMS_OUTPUT.PUT_LINE('Success');
ELSE
RAISE_APPLICATION_ERROR(-20200, 'Manager ID is not a match');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Manager does not exist');
END chk_dept_mgr;
END check_emp_pkg;
我不知道为什么会收到错误消息!
你在第二个过程中多了一个begin
和declare
。这部分:
PROCEDURE chk_dept_mgr
(p_empid IN employees.employee_id%TYPE,
p_mgr IN employees.manager_id%TYPE)
IS BEGIN
DECLARE
v_mgr_id departments.manager_id%TYPE;
BEGIN
SELECT manager_id INTO v_mgr_id
...
应该是:
PROCEDURE chk_dept_mgr
(p_empid IN employees.employee_id%TYPE,
p_mgr IN employees.manager_id%TYPE)
IS
v_mgr_id departments.manager_id%TYPE;
BEGIN
SELECT manager_id INTO v_mgr_id
...
你可以从缩进中看出你的块没有对齐。当您并不真正需要一个内部块时,您已经启动了一个内部块,并且没有正确结束它。您可以在 end if
之后添加一个 end
,但该内部块仍然不会添加任何有用的东西。
我有一个问题,我想不通。它显示....
Error at line 28: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
begin end function pragma procedure
- CREATE OR REPLACE PACKAGE BODY check_emp_pkg
- IS
- PROCEDURE chk_hiredate
- (p_date IN employees.hire_date%TYPE)
下面是我的代码:
CREATE OR REPLACE PACKAGE BODY check_emp_pkg
IS
PROCEDURE chk_hiredate
(p_date IN employees.hire_date%TYPE)
IS BEGIN
IF MONTHS_BETWEEN(SYSDATE, p_date) > g_max_length_of_service * 12 THEN
RAISE_APPLICATION_ERROR(-20200, 'Invalid Hiredate');
END IF;
END chk_hiredate;
PROCEDURE chk_dept_mgr
(p_empid IN employees.employee_id%TYPE,
p_mgr IN employees.manager_id%TYPE)
IS BEGIN
DECLARE
v_mgr_id departments.manager_id%TYPE;
BEGIN
SELECT manager_id INTO v_mgr_id
FROM departments;
IF p_mgr = v_mgr_id THEN
DBMS_OUTPUT.PUT_LINE('Success');
ELSE
RAISE_APPLICATION_ERROR(-20200, 'Manager ID is not a match');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Manager does not exist');
END chk_dept_mgr;
END check_emp_pkg;
我不知道为什么会收到错误消息!
你在第二个过程中多了一个begin
和declare
。这部分:
PROCEDURE chk_dept_mgr
(p_empid IN employees.employee_id%TYPE,
p_mgr IN employees.manager_id%TYPE)
IS BEGIN
DECLARE
v_mgr_id departments.manager_id%TYPE;
BEGIN
SELECT manager_id INTO v_mgr_id
...
应该是:
PROCEDURE chk_dept_mgr
(p_empid IN employees.employee_id%TYPE,
p_mgr IN employees.manager_id%TYPE)
IS
v_mgr_id departments.manager_id%TYPE;
BEGIN
SELECT manager_id INTO v_mgr_id
...
你可以从缩进中看出你的块没有对齐。当您并不真正需要一个内部块时,您已经启动了一个内部块,并且没有正确结束它。您可以在 end if
之后添加一个 end
,但该内部块仍然不会添加任何有用的东西。