Exemplo de stored procedure firebird

02/07/2019

7

Olá pessoal!

Preciso de um exemplo de stored procedure firebird, que faça loop em uma consulta para fazer update em outra.

Podem ajudar?!
Responder

Post mais votado

03/07/2019

Boa noite Elaine!!!

Se eu entendi bem o que você deseja, esse exemplo que eu criei vai te ajudar:

CREATE TABLE SOCIO(
  ID INT,
  NOME VARCHAR(50),
  CARENCIA DATE
);

INSERT INTO SOCIO(ID, NOME, CARENCIA) VALUES(1, 'DANIEL', '2019.05.22');
INSERT INTO SOCIO(ID, NOME, CARENCIA) VALUES(2, 'BRUNNA', '2019.07.02');

CREATE TABLE DEPENDENTE(
  ID INT,
  SOCIO_ID INT,
  NOME VARCHAR(50),
  CARENCIA DATE
);

INSERT INTO DEPENDENTE(ID, SOCIO_ID, NOME, CARENCIA) VALUES(1, 1, 'MANOEL', NULL);
INSERT INTO DEPENDENTE(ID, SOCIO_ID, NOME, CARENCIA) VALUES(2, 1, 'HERONDINA', NULL);
INSERT INTO DEPENDENTE(ID, SOCIO_ID, NOME, CARENCIA) VALUES(3, 2, 'MARCOS', NULL);
INSERT INTO DEPENDENTE(ID, SOCIO_ID, NOME, CARENCIA) VALUES(4, 2, 'VERA', NULL);

CREATE OR ALTER PROCEDURE P_ATUALIZA_CARENCIA_DEPENDENTE()
AS
  DECLARE PARAR_LACO CHAR(1);
  DECLARE V_ID INT;
  DECLARE V_DATA DATE;
  DECLARE CRSR CURSOR FOR(SELECT ID, CARENCIA FROM SOCIO);
BEGIN
  OPEN CRSR;

  PARAR_LACO = 'N';

  WHILE (PARAR_LACO = 'N') DO
  BEGIN
    FETCH CRSR INTO V_ID, V_DATA;

    IF (ROW_COUNT = 1) THEN
    BEGIN
      UPDATE DEPENDENTE SET CARENCIA = :V_DATA WHERE SOCIO_ID = :V_ID;
    END
    ELSE
      PARAR_LACO = 'S';
  END

  CLOSE CRSR;
END;

EXECUTE PROCEDURE P_ATUALIZA_CARENCIA_DEPENDENTE;

SELECT * FROM DEPENDENTE;


Nesse exemplo eu faço um loop na tabela de sócios e atualizo todos os dependentes daquele sócio com a data de carência dele.

Espero que tenha te ajudado!!!

Qualquer dúvida estou a disposição!!!
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar