PLS-00103: Обнаружен символ ")" при ожидании одного из следующих действий: - PullRequest
0 голосов
/ 22 марта 2012

У меня есть эта хранимая процедура для Oracle:

create or replace
procedure bns_saa_message_get()  <--- PROBLEM IS HERE BC I HAVE NO PARAMS TO PASS
AS
begin
  select HostNumber, SAAMessage from BNS_SAA_MESSAGES where HostNumber=(select max(HostNumber) from BNS_SAA_MESSAGES);
end;

Я получаю следующую ошибку при попытке ее скомпилировать:

Error(2,31): PLS-00103: Encountered the symbol ")" when expecting one of the following:     <an identifier> <a double-quoted delimited-identifier>    current 

Вопрос:
Как создать хранимую процедуру, в которой нет необходимости передавать ей аргументы?

Ответы [ 3 ]

4 голосов
/ 22 марта 2012

Снимите скобки:

CREATE OR REPLACE PROCEDURE bns_saa_message_get
AS
BEGIN
   SELECT hostnumber, saamessage
     FROM bns_saa_messages
    WHERE hostnumber = (SELECT MAX (hostnumber) FROM bns_saa_messages);
END;

РЕДАКТИРОВАТЬ:

Чтобы ответить на второй вопрос ...

CREATE OR REPLACE PROCEDURE bns_saa_message_get
AS
   v_hostnumber bns_saa_messages.hostnumber%TYPE;
   v_saamessage bns_saa_messages.saamessage%TYPE;
BEGIN
   SELECT hostnumber, saamessage
     INTO v_hostnumber, v_saamessage 
     FROM bns_saa_messages
    WHERE hostnumber = (SELECT MAX (hostnumber) FROM bns_saa_messages);
END;

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

4 голосов
/ 22 марта 2012

Просто опустите скобки полностью:

create or replace
procedure bns_saa_message_get
AS

Железнодорожная схема в документации показывает, что если вы включите открывающую скобку, то потребуется хотя бы один аргумент.

1 голос
/ 22 марта 2012

Удалите (), когда у вас нет никаких параметров.

Пример: процедура bns_saa_message_get () -> процедура bns_saa_message_get AS

...