【问题标题】:PLS-00103: Encountered the symbol "/"PLS-00103:遇到符号“/”
【发布时间】:2016-11-05 13:14:45
【问题描述】:

我收到的错误取决于我是删除“/”还是保留它。

/:

PLS-00103:遇到符号/

没有/

PLS-00103:遇到符号CREATE

我做错了什么?

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(employee_id NUMBER);
  PROCEDURE edit_first_name(employee_id NUMBER, first_name employees.first_name%TYPE);
  FUNCTION get_emp(employee_id NUMBER) RETURN employee_id;
END;    
/
CREATE OR REPLACE PACKAGE BODY EMP_PACKAGE AS
-- procedure will edit an employee's first name
  PROCEDURE edit_first_name(employee_id NUMBER) IS
  BEGIN
    INSERT INTO employees (employees.first_name)
    VALUES (first_name);
  END edit_first_name;
END;
/

【问题讨论】:

  • 你用什么工具来运行这个脚本?
  • 我一直在使用 sqldeveloper。抱歉,我尝试使用带有该标签的标签,但它要求我有 1500 分,所以我完全没有想到将其添加到帖子中。

标签: sql oracle plsql package oracle-sqldeveloper


【解决方案1】:

在包装规范中你有一行:

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

【讨论】:

  • @MTO 我已经更改了您提到的所有内容,但我遇到了与以前相同的错误。由于 cmets 的字符数限制,我不是 100% 如何向您展示我所做的更改。不过,我确实理解您提出的所有建议。
【解决方案2】:

您的代码中有一些错误。 也许你需要这个? 我在sql developer中编译这个没有任何错误

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;

【讨论】:

  • 我认为我的连接所基于的数据库可能有问题,因为我复制到您的代码中只是为了测试它,但我仍然收到相同的错误。这是显示给我的屏幕截图。 imgur.com/pLTQyZ3
  • 复制它不在包中。创建新的“sql文件”文件->新建->所有项目-> Sql文件并复制到那里。并在运行后
猜你喜欢
  • 2018-01-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多