Создать пакет оракула, с которым столкнулся PLS-00103: Обнаружен символ "СОЗДАТЬ"
Я пишу пакет oracle, используя Oracle sql developer, я получил эту ошибку компиляции:
Ошибка (7,1): PLS-00103: Обнаружен символ "CREATE".
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;
Я получил ту же ошибку.
Ответы
Ответ 1
Когда у вас есть BEGIN, END и т.д., вы находитесь в PL/SQL, а не в SQL.
Блок PL/SQL должен быть завершен с помощью одной ( "прямой" ) косой черты в самом начале строки. Это говорит Oracle, что вы сделали с вашим блоком PL/SQL, поэтому он компилирует этот блок текста.
SQL-запрос - завершается точкой с запятой:
update orders set status = 'COMPLETE' where order_id = 55255;
PL/SQL block - команды, разделенные точкой с запятой, блокировка завершается с помощью косой черты:
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;
/
Ответ 2
Это работало для меня с использованием 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;
/
Я не мог заставить его работать, пока я не создал таблицы и столбцы, которые он будет использовать.
Ответ 3
выполнить пакет и тело пакета отдельно с F5
Ответ 4
После нескольких часов разочарования мне удалось заставить этот материал работать. У меня была точная проблема, как и вы.
Решение для меня состояло в том, чтобы запустить его как script - не в коде пакета. Слитки косой черты работают корректно на листе SQL. Я прилагаю разницу, надеюсь, это поможет вам!
![enter image description here]()
Ответ 5
У меня была та же проблема. Я создаю пакет, используя главное меню, в левом и вложенном объявлении пакета и в том же самом файле .sql.
Проблема будет решена, когда я скопирую весь код и вставлю его в новый рабочий лист и поставлю "/" после
end package_name (как после объявления пакета, так и тела), а затем выполнить рабочий лист как script.
Ответ 6
У меня была эта проблема (Error (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.