Exemplo de stored procedure firebird

02/07/2019

0

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

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

Daniel Araújo

Daniel Araújo
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar