我有一个问题,我无法弄明白。它显示....
第28行出错:PLS-00103:遇到符号“文件结束”时 期待以下之一:
开始结束函数编译指示程序
- 创建或替换包裹身体check_emp_pkg
- IS
- 程序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;
我不知道为什么我会收到错误!
答案 0 :(得分:1)
您在第二个程序中有一个额外的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
之后添加end if
,但内部区块仍然无法添加任何有用的内容。