While e For no Firebird

Veja nesta Quick com utlizar While e For no Firebird

Olá galera, nesta Quick Tips, irei mostrar como podemos While e For no Firebird. Os chamados Loops, assim como em linguagem de programação em Banco de Dados também temos While e For, para nos ajudar com Stored Procedures e Triggers. Vamos começar vendo então o While

WHILE-DO

Com este comando podemos criar um loop onde não conhecemos o término da execução, mas ele será encerrado quando a condição não for mais verdadeira, veja a sintaxe:

WHILE (i <=5) DO BEGIN SELECT language_req[:i] FROM job WHERE ((job_code=:code) AND (job_grade=:grade) AND (job_country=:cty) AND (language_req IS NOT NULL)) INTO :languages; IF (languages=' ')THEN /* Imprime 'NULL' ao invés de espaços */ languages='NULL'; i=i +1; SUSPEND;

Antes de falarmos sobre o FOR vamos analisar uma coisa interessante que seria utilizarmos comandos de SQL em uma Stored Procedure.

Comando em Stored Procedure

Podemos utilizar comandos de SQL SELECT, INSERT, UPDATE e DELETE, em uma Stored Procedure, da mesma forma como fazemos em uma query, mudando algumas coisas na sintaxe. No comando INSERT, os valores inseridos são resultantes de um parâmetro de entrada, veja como ficaria:

CREATE PROCEDURE ADD_ESTADO( IDESTADO SMALLINT, DESCRICAO CHAR(2) ) AS BEGIN BEGIN INSERT INTO ESTADO (IDESTADO, DESCRICAO) VALUES (:IDESTADO, :DESCRICAO); WHEN SQLCODE -530 DO EXCEPTION unknown_IDDESCRICAO; END SUSPEND; END ^

Outra diferença seria a inclusão da clausula INTO ao comando SELECT, de maneira que possamos selecionar valores diferentes para varáveis ou parâmetros de saída, veja a sintaxe:

CREATE PROCEDURE CLIENTE_COUNT RETURNS ( CLIENTECOUNT INTEGER ) AS BEGIN SELECT COUNT(*) FROM CLIENTE INTO :CLIENTECOUNT; SUSPEND; END ^

FOR-DO

Com este comando podemos criar um loop onde sabemos qual é o término. Vamos ver agora um exemplo

CREATE PROCEDURE ORDER_LIST( IDCLIENTE INTEGER ) RETURNS ( DESCRICAO CHAR(8) ) AS BEGIN FOR SELECT DESCRICAO FROM CLIENTE WHERE IDCLIENTE = :IDCLIENTE INTO :DESCRICAO DO SUSPEND; END ^

SUSPEND

O Comando SUSPEND informa a Stored Procedure para suspender a execução até que seja solicitado dados pelo cliente. Sempre será utilizado quando a Stored Procedure precisar retornar um valor para o cliente, evitando que a Stored Procedure encerre antes que o cliente tenha o resultado desejado. Veja a sintaxe:

CREATE PROCEDURE CLIENTE_COUNT RETURNS ( CLIENTECOUNT INTEGER ) AS BEGIN SELECT COUNT(*) FROM CLIENTE INTO :ClienteCount; SUSPEND; END ^

Fico por aqui ate à próxima Quick Tips.

Um abraço

Artigos relacionados