【问题标题】:cant compile plsql package in sqldeveloper 4.0无法在 sqldeveloper 4.0 中编译 plsql 包
【发布时间】:2014-06-17 16:05:02
【问题描述】:

我必须使用 sqldeveloper 4.0。但我无法在其中编译单个包。它可以在其他程序中编译,但我必须使用 sqldeveloper。我尝试编译oracle教程包:

CREATE OR REPLACE PACKAGE emp_actions AS  -- spec
   TYPE EmpRecTyp IS RECORD (emp_id INT, salary REAL);
   CURSOR desc_salary RETURN EmpRecTyp;
   PROCEDURE hire_employee (
      ename  VARCHAR2,
      job    VARCHAR2,
      mgr    NUMBER,
      sal    NUMBER,
      comm   NUMBER,
      deptno NUMBER);
   PROCEDURE fire_employee (emp_id NUMBER);
END emp_actions;

CREATE OR REPLACE PACKAGE BODY emp_actions AS  -- body
   CURSOR desc_salary RETURN EmpRecTyp IS
      SELECT empno, sal FROM emp ORDER BY sal DESC;
   PROCEDURE hire_employee (
      ename  VARCHAR2,
      job    VARCHAR2,
      mgr    NUMBER,
      sal    NUMBER,
      comm   NUMBER,
      deptno NUMBER) IS
   BEGIN
      INSERT INTO emp VALUES (empno_seq.NEXTVAL, ename, job,
         mgr, SYSDATE, sal, comm, deptno);
   END hire_employee;

   PROCEDURE fire_employee (emp_id NUMBER) IS
   BEGIN
      DELETE FROM emp WHERE empno = emp_id;
   END fire_employee;
END emp_actions; 

我得到错误(14,1): PLS-00103: Encountered the symbol "CREATE" - on create package body line

我尝试将“/”放在它前面,但出现错误(13,1):PLS-00103:遇到符号“/”。

我不知道数据库的版本。

谢谢你的帮助

【问题讨论】:

    标签: plsql package oracle-sqldeveloper


    【解决方案1】:

    如果你想同时运行这两个语句,那么你需要在每个语句后面加上一个/by itself on a new line

    CREATE OR REPLACE PACKAGE emp_actions AS  -- spec
      ...
    END emp_actions;
    /
    
    CREATE OR REPLACE PACKAGE BODY emp_actions AS  -- body
      ...
    END emp_actions; 
    /
    

    ... 然后执行“运行脚本”(F5,或文档上方带有绿色箭头图标的按钮),而不是“运行语句”(Ctrl-Enter,或仅带有绿色箭头的按钮)。输出将进入“脚本输出”窗格。

    您不能使用“运行语句”运行多个语句,尽管您仍然可以从脚本中选择一个语句的文本并自行运行 - 如果它是一个查询,那么输出仍将出现在“查询”中结果'窗格。


    如果您从“文件”->“新建”菜单项创建了新包,或者通过在对象浏览器中右键单击“包”标题并选择“新建包”,则只能输入规范在显示的窗口中(选项卡具有包名称和包装礼物的图标)。这实际上更有意义 - 我认为您的第二个错误的行号是错误的,但这与在此窗口中工作相匹配。

    因此,只需在该窗口中输入包规范并进行编译。然后返回对象浏览器,刷新包列表,右键单击新包名称并选择“创建正文”。您将看到第二个选项卡,它看起来非常相似,但选项卡名称会显示“正文”。你可以把包体放在那里编译。

    使用这些视图,您始终可以在单独的选项卡中看到规范和正文。一旦两者都存在,每个都有一个按钮来打开另一个 - 规范窗口有一个按钮来打开主体,反之亦然。

    【讨论】:

    • 我希望在包窗口中而不是在 sql 工作表中得到答案。我不能给你绿色,因为我还有问题,我不能用这种方式正确地测试它。我尝试不同的方法。对不起,我是 sql noob。我试着回到它并给你积分。
    • @user3333348 - 添加了一些关于包窗口的信息,希望对您有所帮助。不确定你不能测试什么。
    • 您不能使用 pl/sql 编辑器 b/c 它一次只对单个对象起作用 - 您的包实际上是 2 个 db 对象、规范和正文。所以你必须使用工作表来编译两者 - 作为一个脚本。
    猜你喜欢
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2015-11-10
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多