Trigger, será que tem jeito?

Firebird

20/07/2004

Olá, por favor, ajude-me.

Tenho duas tabelas (CARNÊ e CARNÊ PRESTAÇÃO):

CREATE TABLE CARNE (
    ID_CARNE       INTEGER NOT NULL,
    NU_CARNE       INTEGER NOT NULL,
    NU_VALOR       NUMERIC(9,2) NOT NULL,
    DT_AQUISICAO   DATE DEFAULT CURRENT_DATE NOT NULL,
    NU_PRESTACOES  SMALLINT DEFAULT 12 NOT NULL
);

CREATE TABLE CARNE_PRESTACAO (
    ID_CARNE       INTEGER NOT NULL,
    DT_PAGAMENTO   DATE DEFAULT CURRENT_DATE,
    NU_VALOR_PAGO  NUMERIC(9,2),
    NU_PRESTACAO   SMALLINT DEFAULT 1 NOT NULL,
    IN_PAGO        SMALLINT DEFAULT 0 NOT NULL
);

ALTER TABLE CARNE_PRESTACAO ADD CONSTRAINT FK_CARNE_PRESTACAO FOREIGN KEY (ID_CARNE) REFERENCES CARNE (ID_CARNE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE CARNE_PRESTACAO ADD CONSTRAINT UNQ_CARNE_PRESTACAO UNIQUE (ID_CARNE, NU_PRESTACAO);


CARNE 1 X N CARNE_PRESTACAO

[b:8b48092fad]Preciso fazer um trigger que ao se criar um novo registro na tabela CARNE, sejam criados registros na tabela CARNE_PRESTACAO até o número de prestações indicados na tabela CARNE.[/b:8b48092fad]

Tipo assim:
Entro com os dados manualmente na tabela CARNE:
    ID_CARNE: 10
    NU_CARNE: 123
    NU_VALOR: 50,00
    DT_AQUISICAO: 20.07.2004
    NU_PRESTACOES: 10

Aí na tabela CARNE_PRESTACAO é automaticamente inserido:
    ID_CARNE: 10
    DT_PAGAMENTO: NULL
    NU_VALOR_PAGO: NULL
    NU_PRESTACAO: 1 <=========
    IN_PAGO: 0

    ID_CARNE: 10
    DT_PAGAMENTO: NULL
    NU_VALOR_PAGO: NULL
    NU_PRESTACAO: 2 <=========
    IN_PAGO: 0

    3, 4, 5, 6, 7, 8, 9 <=========

    ID_CARNE: 10
    DT_PAGAMENTO: NULL
    NU_VALOR_PAGO: NULL
    NU_PRESTACAO: 10 <=========
    IN_PAGO: 0

Acho que não difícil, mas não estou conseguindo.

Obrigado.

Roberto


Tenil

Tenil

Curtidas 0

Respostas

Tenil

Tenil

20/07/2004

Afarias, ajudaí mano.

Valeu.


GOSTEI 0
Tenil

Tenil

20/07/2004

Pow, to precisando mesmo, ajudae.


GOSTEI 0
Beppe

Beppe

20/07/2004

CREATE TRIGGER Cria_Prestacoes FOR CARNE
ACTIVE AFTER INSERT POSITION 0
AS
    DECLARE VARIABLE contador INTEGER;
BEGIN
    contador = new.NU_PRESTACOES;
    WHILE (contador > 0) DO
    BEGIN
        INSERT INTO CARNE_PRESTACOES
            (ID_CARNE, DT_PAGAMENTO, NU_VALOR_PAGO, NU_PRESTACAO, IN_PAGO)
        VALUES (new.ID_CARNE, NULL, NULL, contador, 0);
        contador = contador - 1;
    END;
END


Diz aí se funcionou. :wink:


GOSTEI 0
Tenil

Tenil

20/07/2004

FUNCIONOU! :D :D :D

Beppe, kra, muito obrigado mesmo.

Vc salvou minha pele.

Vc pode me dizer mais uma coisa?

Tem, jeito de fazer um select num trigger que retorna 1 valor apenas e atribuir este valor a uma variável e usá-lo?

Tentei fazer isto mas não consegui.

Valew brother,

Roberto


GOSTEI 0
POSTAR