Обнаружен пакет Oracle: PLS-00103: обнаружен символ "CREATE"
Я пишу пакет Oracle с помощью разработчика Oracle SQL, я получил эту ошибку компиляции:
Ошибка (7,1): PLS-00103: Обнаружен символ "СОЗДАТЬ" .
create or replace
PACKAGE TestPackage AS
FUNCTION beforePopulate RETURN BOOLEAN;
FUNCTION afterPopulate RETURN BOOLEAN;
END TestPackage;
CREATE OR REPLACE PACKAGE BODY TestPackage AS
FUNCTION beforePopulate RETURN BOOLEAN AS
BEGIN
DELETE FROM TEST_1;
INSERT INTO TEST_1
SELECT * FROM TEST WHERE VALUE=300;
COMMIT;
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN
RETURN FALSE;
END;
FUNCTION afterPopulate RETURN BOOLEAN AS
BEGIN
UPDATE TEST SET RESULT="completed" WHERE VALUE=300;
COMMIT;
RETURN TRUE;
EXCEPTION
WHEN OTHERS RETURN FALSE;
END;
END;
END TestPackage;
Если я добавлю /
в строке 6 ошибка стала такой:
Ошибка (6,1): PLS-00103: обнаружен символ "/"
Я устал от пустой реализации, как это:
create or replace
package package1 as
END PACKAGE1;
CREATE OR REPLACE
package body package1 as
end package1;
Я получил ту же ошибку.
6 ответов
Когда у вас есть BEGIN, END и т. Д., Вы используете PL/SQL, а не SQL.
Блок PL/SQL должен заканчиваться одной ("прямой") косой чертой в самом начале строки. Это говорит Oracle, что вы закончили с вашим блоком PL/SQL, поэтому он компилирует этот блок текста.
SQL-запрос - заканчивается точкой с запятой:
update orders set status = 'COMPLETE' where order_id = 55255;
Блок PL/SQL - команды, разделенные точкой с запятой, блок завершается косой чертой:
create or replace procedure mark_order_complete (completed_order_id in number)
is
begin
update orders set status = 'COMPLETE' where order_id = :completed_order_id;
end mark_order_complete;
/
Это работало для меня, используя Oracle SQL Developer:
create or replace PACKAGE TestPackage AS
FUNCTION beforePopulate
RETURN BOOLEAN;
FUNCTION afterPopulate
RETURN BOOLEAN;
END TestPackage;
/
CREATE OR REPLACE PACKAGE BODY TestPackage AS
FUNCTION beforePopulate
RETURN BOOLEAN AS
BEGIN
DELETE FROM TESTE;
INSERT INTO TESTE
SELECT 1,1,1 FROM DUAL;
COMMIT;
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN
RETURN FALSE;
END;
FUNCTION afterPopulate
RETURN BOOLEAN AS
BEGIN
UPDATE TESTE SET TESTE='OK' WHERE TESTE='';
COMMIT;
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN RETURN FALSE;
END;
END TestPackage;
/
Я не мог заставить его работать, пока я фактически не создал таблицы и столбцы, которые это использовало бы.
После нескольких часов разочарования мне удалось заставить этот материал работать. У меня была такая же проблема, как и у вас.
Решением для меня было запустить его как скрипт, а не в коде пакета. Прямая косая черта работает правильно в листе SQL. Я прилагаю разницу, я надеюсь, это поможет вам!
У меня такая же проблема. Я создаю пакет, используя главное меню слева и помещаю объявление пакета и тело в один и тот же файл.sql. Проблема решается, когда я копирую весь код, вставляю его в новый лист и помещаю "/" после end имя_пакета (как после объявления пакета, так и в теле), а затем выполняю лист в виде скрипта.
У меня была эта проблема (Ошибка (6,1): PLS-00103: обнаружен символ "/"), когда я скопировал весь код пакета db (как заголовки процедур, так и реализации) в sqldeveloper в user/packages/MY_PACKAGE_NAME/MY_PACKAGE_BODY вместо копирование заголовков (без '/' в конце) в user / packages / MY_PACKAGE_NAME и реализация (без заголовков вверху и без '/' в конце) в user/packages/MY_PACKAGE_NAME/MY_PACKAGE_BODY.