Проблема в том, что ваш синтаксис неправильный. Вам необходимо определить выходные параметры и использовать либо select ... into <list of variables>
, чтобы выбрать одну строку, либо for select ... into <list of variables> do
, чтобы зациклить несколько строк.
Ваша хранимая процедура должна выглядеть примерно так:
CREATE PROCEDURE SHOW_ALL
RETURNS (NDZIEN varchar(50), CKIERUNEK varchar(50), CMEDIUM varchar(50))
AS
BEGIN
/* Procedure body */
for SELECT
M_DOKUMENTY.NDZIEN,
M_DOKUMENTY.CKIERUNEK,
M_DOKUMENTY.CMEDIUM
FROM M_DOKUMENTY
WHERE M_DOKUMENTY.SRODZAJ = '1234'
into :NDZIEN, :CKIERUNEK, :CMEDIUM
do
SUSPEND;
END
Если ваш выбор производит только одну строку, то вы также можете рассмотреть возможность использования
CREATE PROCEDURE SHOW_ALL
RETURNS (NDZIEN varchar(50), CKIERUNEK varchar(50), CMEDIUM varchar(50))
AS
BEGIN
/* Procedure body */
SELECT
M_DOKUMENTY.NDZIEN,
M_DOKUMENTY.CKIERUNEK,
M_DOKUMENTY.CMEDIUM
FROM M_DOKUMENTY
WHERE M_DOKUMENTY.SRODZAJ = '1234'
into :NDZIEN, :CKIERUNEK, :CMEDIUM;
SUSPEND;
END
Обратите внимание на ;
после предложения into
. В этом случае вы также можете пропустить SUSPEND;
. Это сделает хранимую процедуру исполняемой, а не выбираемой. В зависимости от того, как вы хотите его использовать, это может быть лучшим выбором.
См. Документацию Firebird по созданным хранимым процедурам и его процедурному языку SQL для получения дополнительной информации.