Подтвердить что ты не робот

Создать пакет оракула, с которым столкнулся 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;

Я получил ту же ошибку.

4b9b3361

Ответ 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.