Plsql 在包内定义过程

Plsql 在包内定义过程,plsql,oracle-sqldeveloper,Plsql,Oracle Sqldeveloper,我已经在SQLDeveloper中创建了一些过程,它们运行良好。但是,我现在正在创建一个包含所有这些过程的包,并且似乎无法找到正确的方法对包进行编码,因为它返回以下错误(参考包体的CREATE): 这是我的密码: CREATE OR REPLACE PACKAGE package_test AS PROCEDURE copy_object; END package_test; CREATE OR REPLACE PACKAGE BODY package_test AS PROCEDURE

我已经在SQLDeveloper中创建了一些过程,它们运行良好。但是,我现在正在创建一个包含所有这些过程的包,并且似乎无法找到正确的方法对包进行编码,因为它返回以下错误(参考包体的CREATE):

这是我的密码:

CREATE OR REPLACE PACKAGE package_test AS

PROCEDURE copy_object;

END package_test;

CREATE OR REPLACE PACKAGE BODY package_test AS

PROCEDURE copy_object IS
CURSOR object_cursor IS
SELECT COD_OBJECT, OBJECT_NAME FROM OBJECT;

object_rec object_cursor%rowtype;

BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE DATABASE2.D_OBJECT';
FOR object_rec IN object_cursor
LOOP
    INSERT INTO DATABASE2.D_OBJECT (COD_OBJECT,OBJECT_NAME) VALUES (object_rec.OOD_OBJECT,object_rec.OBJECT_NAME);
END LOOP;
COMMIT;
END copy_object;
END package_test;

我已经做了一些搜索,我能想到的唯一一件事可能是一些与光标上的定义有关的问题…但不确定。提前感谢

我在sqlplus和sqldeveloper中成功地运行了它(sqldeveloper中的F5:“运行脚本”)。我更改了两个dml语句,因为我的模式不同

SQL> CREATE OR REPLACE PACKAGE package_test AS
  2
  3  PROCEDURE copy_object;
  4
  5  END package_test;
  6  /

Package created.

SQL>
SQL> CREATE OR REPLACE PACKAGE BODY package_test AS
  2
  3  PROCEDURE copy_object IS
  4  CURSOR object_cursor IS
  5  SELECT * from dual;
  6
  7  object_rec object_cursor%rowtype;
  8
  9  BEGIN
 10  EXECUTE IMMEDIATE 'TRUNCATE TABLE DATABASE2.D_OBJECT';
 11  FOR object_rec IN object_cursor
 12  LOOP
 13      NULL; --INSER INTO DATABASE2.D_OBJECT (COD_OBJECT,OBJECT_NAME) VALUES (object_rec.OOD_OBJECT,object_rec.OBJECT_
NAME);
 14  END LOOP;
 15  COMMIT;
 16  END copy_object;
 17  END package_test;
 18  /

Package body created.

SQL>

如果您打算将其作为脚本运行,请在“END package_test;”(以及在主体创建之后)后面的单独一行中添加“/”。这将执行上一个命令(create命令),其中分号只是分隔语句。您在“INSER”上也缺少一个“T”,并且在“COMMIT”之后有一个逗号,而不是分号。我已经尝试过了,错误更改为“遇到符号”/”。另外,我在Oreilly的“OraclePL/SQL编程”中读到“/”只是SQLPlus的一部分,我正在使用SQLDeveloper@Glenn这是因为我没有使用复制粘贴,因为它在另一台没有Internet的计算机上,所以我手动复制了它:PIn sqldeveloper,您有两个选项“运行语句”(绿色箭头)和“运行脚本”(页面上的绿色箭头)。如果使用运行脚本,请使用斜杠。它起作用了。若要运行语句,则只需一次选择一条语句。例如,选择PackageSpec语句并运行该语句。然后选择包体语句并运行该语句。在这种情况下,您不需要斜杠。但是由于代码没有正确编译(即使使用“/”),我无法运行它。是的,它运行了。我成功地编译并运行了它,我认为它是一个空白;)非常感谢。
SQL> CREATE OR REPLACE PACKAGE package_test AS
  2
  3  PROCEDURE copy_object;
  4
  5  END package_test;
  6  /

Package created.

SQL>
SQL> CREATE OR REPLACE PACKAGE BODY package_test AS
  2
  3  PROCEDURE copy_object IS
  4  CURSOR object_cursor IS
  5  SELECT * from dual;
  6
  7  object_rec object_cursor%rowtype;
  8
  9  BEGIN
 10  EXECUTE IMMEDIATE 'TRUNCATE TABLE DATABASE2.D_OBJECT';
 11  FOR object_rec IN object_cursor
 12  LOOP
 13      NULL; --INSER INTO DATABASE2.D_OBJECT (COD_OBJECT,OBJECT_NAME) VALUES (object_rec.OOD_OBJECT,object_rec.OBJECT_
NAME);
 14  END LOOP;
 15  COMMIT;
 16  END copy_object;
 17  END package_test;
 18  /

Package body created.

SQL>