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