Comando quot;Suspendquot; em StoredProcedure
Olá! Estou usando Firebird 1.5 e algo estranho ocorreu. Há um tempo atrás eu havia feito a seguinte StoredProcedure para subtrair do estoque uma quantidade X de um produto:
Nessa SP eu não usei o comando Suspend. Hoje fui fazer uma outra SP para gerar um novo código de um generator caso seja necessário:
O fato que eu não consegui entender é que essa segunda só retorna o valor para ´SCODIGO´ se eu usar esse suspend no final já a primeira sem o suspend retorna o valor. Por que isso acontece?
Até!
DECLARE VARIABLE ATUAL FLOAT; BEGIN SELECT QUANTIDADE FROM PRODUTOS WHERE CODIGO=:PRODUTO INTO :ATUAL; NEWQUANT = :ATUAL-:NQUANT; UPDATE PRODUTOS SET QUANTIDADE=:NEWQUANT WHERE CODIGO=:PRODUTO; END
Nessa SP eu não usei o comando Suspend. Hoje fui fazer uma outra SP para gerar um novo código de um generator caso seja necessário:
DECLARE VARIABLE TCODIGO INTEGER; begin SELECT CODSUB FROM NOTAS WHERE DATA=:PDATA AND FORNECEDOR=:PFORNECEDOR INTO :TCODIGO; IF (TCODIGO > 1) THEN BEGIN SCODIGO = TCODIGO; END ELSE BEGIN INSERT INTO NOTAS (DATA,FORNECEDOR) VALUES (:PDATA,:PCLINICA); SELECT CODSUB FROM NOTAS WHERE DATA=:PDATA AND FORNECEDOR=:PFORNECEDOR INTO :SCODIGO; END SUSPEND; end
O fato que eu não consegui entender é que essa segunda só retorna o valor para ´SCODIGO´ se eu usar esse suspend no final já a primeira sem o suspend retorna o valor. Por que isso acontece?
Até!
Delphi32
Curtidas 0
Respostas
Dorivansousa
14/10/2004
O Comando SUSPEND suspende a execução do procedure, retornando os valores adequados dos parâmetros de saída. Se o comando SUSPEND ocorre em um executable procedure, ele tem o mesmo efeito de um
comando EXIT, pois o procedure não é retomado. Porém, em um select procedure, a execução é retomada no comando seguinte ao SUSPEND quando o próximo FETCH do SELECT é executado. Atenção para que um
parâmetro de saída que não tenha tido atribuição pode voltar qualquer valor.
comando EXIT, pois o procedure não é retomado. Porém, em um select procedure, a execução é retomada no comando seguinte ao SUSPEND quando o próximo FETCH do SELECT é executado. Atenção para que um
parâmetro de saída que não tenha tido atribuição pode voltar qualquer valor.
GOSTEI 0
Dorivansousa
14/10/2004
olha essa apotila:
http://www.comunidade-firebird.org/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=43&title=Introdução a Stored Procedures e Triggers no Firebird
ou baixe direto:
[url]http://www.comunidade-firebird.org/modules.php?name=Downloads&d_op=getit&lid=43[/url]
http://www.comunidade-firebird.org/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=43&title=Introdução a Stored Procedures e Triggers no Firebird
ou baixe direto:
[url]http://www.comunidade-firebird.org/modules.php?name=Downloads&d_op=getit&lid=43[/url]
GOSTEI 0
Martins
14/10/2004
o SUSPEND serve para informar que os parâmetros de saída devem ser enviados como resposta do procedimento (como um ´registro´) -- deve ser usado apenas em Procedimentos ´selecionáveis´ (procedimentos q podem retornar diversas ´linhas´ e são manipulados semelhantemente à tabelas ou views)
Palavras do Anderson.
GOSTEI 0