Обнаружен символ "/" при компиляции пакета - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь сделать что-то довольно простое, просто создать пакет и его тело. Это мой код (из документации оракула ):

create or replace PACKAGE emp_bonus_2 AS
   PROCEDURE calc_bonus (date_hired number);
END emp_bonus_2;
/
CREATE PACKAGE BODY emp_bonus_2 AS
   PROCEDURE calc_bonus
     (date_hired number) IS
   BEGIN
     DBMS_OUTPUT.PUT_LINE
       ('Employees hired on ' || date_hired || ' get bonus.');
   END;
END emp_bonus_2 ;
/

При компиляции я получаю эту ошибку:

Ошибка (4,1): PLS-00103: обнаружен символ "/"

Я использовал "/" раньше для создания триггеров без проблем, поэтому я не знаю, в чем проблема. Я попытался удалить "/", что привело к ошибке "Encountered CREATE".

Я работаю над SQLDeveloper для базы данных Oracle 11g.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Ваш код:

create or replace PACKAGE emp_bonus_2 AS
   PROCEDURE calc_bonus (date_hired number);
END emp_bonus_2;
/
CREATE PACKAGE BODY emp_bonus_2 AS
   PROCEDURE calc_bonus
     (date_hired number) IS
   BEGIN
     DBMS_OUTPUT.PUT_LINE
       ('Employees hired on ' || date_hired || ' get bonus.');
   END;
END emp_bonus_2 ;
/

Этот блок кода представляет собой сценарий, который создает два объекта, ПАКЕТ и ТЕЛО ПАКЕТА.

Редактор кода в SQL Developer предназначен для работы с одним объектом кода. Вы можете скопировать и вставить первый или второй кодовые объекты без '/', и все будет в порядке.

Если вы хотите выполнить весь блок, вы можете поместить его в рабочую таблицу SQL и запустить с помощью F5.

«/» сообщает разработчику SQL, что вы закончили с вашим PL / SQL-кодом. Это не имеет смысла с точки зрения базы данных, поэтому возникает ошибка, когда вы включаете ее в редактор кода - она ​​также отправляется в базу данных.

Когда вы выполняете это в SQL Worksheet, SQL Developer видит символ «/» и начинает: «Ах, вот и конец этого фрагмента кода, идите на выполнение, а затем начните снова». «/» Никогда не попадает в саму базу данных.

Обратите внимание, что в SQL Plus знак «/» также может означать - «иди, запусти этот бит кода снова». Это может вызвать проблемы при создании сценариев развертывания для SQL Plus, где вы можете выполнять вещи более одного раза, потому что вы добавили

Docs

Буфер SQL В буфере SQL хранится последний введенный SQL команда или блок PL / SQL (но не команды SQL * Plus). Команда или блок остается в буфере, пока не будет заменен следующей командой SQL или Блок PL / SQL. Вы можете просмотреть содержимое буфера с помощью команды LIST.

Вы можете выполнить команду или блок в буфере SQL, используя RUN или / (косая) команды. RUN отображает команду или блок в буфере прежде чем выполнить его. / (косая черта) выполняет команду или блок в буфер, не отображая его первым. Для получения информации о редактировании Команда или блок, хранящиеся в буфере, см. в разделе Редактирование скриптов в SQL * Plus Командная строка.

0 голосов
/ 13 января 2019

Так что оказывается, это была моя вина. Когда я пытался скомпилировать код на вкладке редактора пакетов (Packages -> emp_bonus_2), произошел сбой.
Перемещение всего кода на рабочий лист и его выполнение работали нормально.

...