2012-07-20 5 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; 

Я сделал некоторый поиск и единственное, что я могу думать, может быть, некоторые проблемы, связанные с определением на CURSOR ... не уверен, хотя. Заранее спасибо

+1

Наведите «/» на отдельную строку после «END package_test;» (и после создания тела), если вы намереваетесь запустить его как скрипт. Это приведет к выполнению предыдущей команды (команды create), где в качестве запятой используется только разделение операторов. – Glenn

+0

Вам также не хватает «T» на «INSER» и после запятой вместо «COMMIT» вместо запятой. – Glenn

+0

Я уже пробовал это, и ошибка изменилась на «Обнаружен символ»/«". Также я прочитал в «Oracle PL/SQL Programming» Орейли, что «/» был только частью SQLPlus, и я использую SQL Developer. @Glenn, потому что я не использовал copy paste, потому что он был на другом компьютере без Интернета, поэтому я вручную скопировал его: P – Bernardo

ответ

1

Я успешно побежал в sqlplus и sqldeveloper (F5 в sqldeveloper: «Run Script»). Я изменил два оператора 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

Смежные вопросы