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
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo