SUSPEND
4 отговора
267 прегледа
SUSPEND
Здравейте, бихте ли ми разяснили, за какво се използва SUSPEND в Firebird при съхранените процедури.
10x
10x
Re: SUSPEND
SUSPEND
Suspends execution of a select procedure until the next FETCH is issued and returns values to the calling application. Available in stored procedures only.
Syntax: SUSPEND;
Description The SUSPEND statement:
Suspends execution of a stored procedure until the application issues the next FETCH. Returns values of output parameters, if any. A procedure should ensure that all output parameters are assigned values before a SUSPEND. SUSPEND should not be used in an executable procedure. Use EXIT instead to indicate to
the reader explicitly that the statement terminates the procedure.
Suspends execution of a select procedure until the next FETCH is issued and returns values to the calling application. Available in stored procedures only.
Syntax: SUSPEND;
Description The SUSPEND statement:
Suspends execution of a stored procedure until the application issues the next FETCH. Returns values of output parameters, if any. A procedure should ensure that all output parameters are assigned values before a SUSPEND. SUSPEND should not be used in an executable procedure. Use EXIT instead to indicate to
the reader explicitly that the statement terminates the procedure.
Re: SUSPEND
Е... с две думи е малко трудно. Значи - STORED PROCEDURES се делят основно на два типа: такива, които връщат данни и такива, които не връщат данни.
SUSPEND е приложим само за първия тип.
Пример:
CREATE PROCEDURE P_SELECT_ARTICLES (
NAME_LIKE VARCHAR(30))
RETURNS (
ART_ID INTEGER,
ART_NAME VARCHAR(30))
AS
BEGIN
FOR SELECT
NOM_ID,
NOM_NAME
FROM
NOM_ARTICLES
WHERE
NOM_NAME LIKE :NAME_LIKE
INTO
:ART_ID, :ART_NAME
DO
SUSPEND;
END
Извикващото приложение пуска заявка
SELECT * FROM P_SELECT_ARTICLES('%цървули%')
Какво прави SUSPEND в примера: FOR SELECT ... цикли набора от записи, а
SUSPEND ги връща един по един към извикващото приложение.
Без SUSPEND процедурата няма да върне нито един ред към приложението и продавачката, която работи с него ще каже на дядо, че в момента цървули нема.

SUSPEND е приложим само за първия тип.
Пример:
CREATE PROCEDURE P_SELECT_ARTICLES (
NAME_LIKE VARCHAR(30))
RETURNS (
ART_ID INTEGER,
ART_NAME VARCHAR(30))
AS
BEGIN
FOR SELECT
NOM_ID,
NOM_NAME
FROM
NOM_ARTICLES
WHERE
NOM_NAME LIKE :NAME_LIKE
INTO
:ART_ID, :ART_NAME
DO
SUSPEND;
END
Извикващото приложение пуска заявка
SELECT * FROM P_SELECT_ARTICLES('%цървули%')
Какво прави SUSPEND в примера: FOR SELECT ... цикли набора от записи, а
SUSPEND ги връща един по един към извикващото приложение.
Без SUSPEND процедурата няма да върне нито един ред към приложението и продавачката, която работи с него ще каже на дядо, че в момента цървули нема.