Ошибка базы данных Oracle Ошибка (3,3): PLS-00103: Обнаружен символ «НАЧАЛО» при ожидании одного из следующего: язык - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в Oracle SQL, я пытаюсь написать новый пакет. Однако я получаю эту ошибку, после поиска решений с этого сайта, я все еще не понимаю, в чем ошибка. Пожалуйста, помогите мне решить проблему. Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Как сказал @FDavidov, вам нужно

a package specification part

и

должен сохранить ваш текущий код в package body части, начиная с

create or replace package body MONITORFLUSSI as ...

Место, где вы получаете ошибки, может иногда сбивать с толку в Oracle. Вы получаете ошибку из-за отсутствия ключевого слова body между create or replace package и MONITORFLUSSI as в первой строке. После добавления body вы получите

Ошибка (1,14): PLS-00201: должен быть объявлен идентификатор «MONITORFLUSSI»

Ошибка (1,14): PLS-00304: не удается скомпилировать тело 'MONITORFLUSSI' без его спецификации

Затем создайте specification part помимо body part пакета и

в body part вам нужно вернуть значения вашего столбца 'в некоторую переменную (и)

с помощью INTO Clause или Cursor:

create or replace package MONITORFLUSSI as
  procedure get_monitorflussi(dataSegnalazione in date, compagnia in varchar2, tabella in varchar2, daInviare in number, o_tabella out varchar2 );
  procedure get_monitorflussi(daInviare in number, o_tabella out varchar2 );
end MONITORFLUSSI;


create or replace package body MONITORFLUSSI as
  procedure get_monitorflussi(dataSegnalazione in date, compagnia in varchar2, tabella in varchar2, daInviare in number, o_tabella out varchar2 ) is
  begin
    for c in ( select * from monitor_flussi t where t.daInviare = daInviare )
    loop
      o_tabella := c.tabella;
    end loop;   
  end;

  procedure get_monitorflussi(daInviare in number, o_tabella out varchar2 ) is
  begin
    select t.tabella into o_tabella  from monitor_flussi t where t.daInviare = daInviare;
  end;
end MONITORFLUSSI;

В которой я переопределил процедуру get_monitorflussi для обоих случаев

INTO Clause и Cursor.

0 голосов
/ 03 мая 2018

Ваша ошибка в том, что вы пытаетесь создать заголовок ПАКЕТА и включить в него текст вашей процедуры.

Пакеты имеют заголовок (или спецификацию) и корпус. Заголовок включает только сигнатуры процедур / функций / типов / переменных, которые вы хотите сделать доступными из внешнего мира (пакета).

Тело включает, помимо прочего, реализацию процедур / функций.

Чтобы решить вашу проблему, оставьте в заголовке пакета только спецификацию процедуры и поместите детали в тело пакета.

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...