2012-07-20 61 views
0

我已經在SQL Developer中創建了一些程序,它們工作正常。但是我現在創建一個包包括所有這些程序,並且似乎無法弄清楚的代碼包的正確方法,因爲它返回以下錯誤(指的包體的CREATE):定義程序包內的程序

PLS-00103: Encountered the symbol "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; 

我已經做了一些搜索,我能想到的唯一的事情是可能與定義上的光標一些問題...不知道,但。在此先感謝

+1

在「END package_test;」之後的另一行放置「/」 (並在創建主體之後),如果您打算將其作爲腳本運行。這將執行前面的命令(create命令),其中分號只是分隔語句。 – Glenn 2012-07-20 11:22:14

+0

您還在「INSER」上缺少「T」,並且在「COMMIT」而不是分號後留有逗號。 – Glenn 2012-07-20 11:36:55

+0

我已經試過了,錯誤更改爲「遇到符號」/「」。另外我在Oreilly的「Oracle PL/SQL編程」中讀到「/」只是SQLPlus的一部分,而我正在使用SQL Developer。 @Glenn這是因爲我沒有使用複製粘貼,因爲它在沒有Internet的另一臺計算機中,所以我手動複製它:P – Bernardo 2012-07-20 11:37:15

回答

1

我成功地運行在sqlplus和sqldeveloper(F5在sqldeveloper:「運行腳本」)。由於我的模式不同,我更改了兩個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> 
+0

是的,它運行我成功地編譯和運行它,我認爲這是一個空白;)謝謝! – Bernardo 2012-07-20 12:06:46