Exemplo de stored procedure firebird

Firebird

02/07/2019

Olá pessoal!

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

Podem ajudar?!
Elaine Urgal

Elaine Urgal

Curtidas 0

Melhor post

Daniel Araújo

Daniel Araújo

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!!!
GOSTEI 1
POSTAR