PLS-00103: 遇到符号 "/"

8 浏览
0 Comments

PLS-00103: 遇到符号 "/"

我收到的错误取决于我是否移除 "/"。

/

PLS-00103: 遇到符号/

没有 /

PLS-00103: 遇到符号CREATE

我做错了什么?

0
0 Comments

问题出现的原因是代码中的"/"符号被错误地放置在了错误的位置,导致编译时出现了错误。

解决方法是将"/"符号放置在正确的位置。在这个例子中,"/"符号应该放在PACKAGE EMP_PACKAGE AS部分的末尾,而不是PACKAGE BODY EMP_PACKAGE AS部分的末尾。

以下是修改后的代码:

create or replace PACKAGE EMP_PACKAGE AS 
  TYPE EMP_TYPE IS RECORD 
  ( /* Employee Type */ 
      employee_id       NUMBER(6,0),
      first_name        VARCHAR2(20),
      last_name         VARCHAR2(25),
      email             VARCHAR2(25),
      phone_number      VARCHAR2(20),
      hire_date         DATE,
      job_id            VARCHAR2(10),
      salary            NUMBER(6,2),
      commission_pct    NUMBER(2,2),
      manager_id        NUMBER(6,0),
      department_id     NUMBER(4,0)
  );
  PROCEDURE add_emp(p_employee_id NUMBER);
  PROCEDURE edit_first_name(p_employee_id NUMBER, p_first_name employees.first_name%TYPE);
  FUNCTION get_emp(p_employee_id NUMBER) RETURN EMP_TYPE;
END;    
/
create or replace PACKAGE BODY EMP_PACKAGE AS
-- procedure will edit an employee's first name
  PROCEDURE edit_first_name(p_employee_id NUMBER, p_first_name employees.first_name%TYPE) IS
  BEGIN
    update employees emp
       set emp.first_name = p_first_name
     where emp.employee_id = p_employee_id;
  END edit_first_name;
  PROCEDURE add_emp(p_employee_id NUMBER) IS BEGIN
    null;
  END;
  FUNCTION get_emp(p_employee_id NUMBER) RETURN EMP_TYPE IS
  BEGIN
    return null;
  END;
END;
/

修改后的代码中,"/"符号正确地放置在了PACKAGE EMP_PACKAGE AS部分的末尾,这样就解决了问题。

0
0 Comments

在包规范中,您有以下行:

FUNCTION get_emp(employee_id NUMBER) RETURN employee_id;

employee_id不是有效的数据类型。

一旦将其更改为有效类型,然后进入包体中的错误:

  • 您缺少ADD_EMP过程和GET_EMP函数。
  • PROCEDURE edit_first_name(employee_id NUMBER)与包规范中的声明不匹配,因为缺少first_name employees.first_name%TYPE参数。
  • INSERT INTO employees (employees.first_name) VALUES (first_name);中,列应为first_name而不是employees.first_name

我已经更改了您提到的所有内容,但是我仍然遇到了之前的错误。由于注释的字符计数限制,我不确定如何向您展示我所做的更改。不过,我理解您提出的所有建议。

0