CREATE TABLE TBMICROREGIAO_CIDADE (
    ID INTEGER NOT NULL,
    MICROREGIAO_ID INTEGER,
    CIDADE VARCHAR(40),
    UF VARCHAR(2),
    BAIRRO VARCHAR(40));

ALTER TABLE TBMICROREGIAO_CIDADE
ADD CONSTRAINT PK_TBMICROREGIAO_CIDADE
PRIMARY KEY (ID);

CREATE SEQUENCE GTBMICROREGIAO_CIDADE;

SET TERM ^ ;

create trigger tbmicroregiao_cidade_bi for tbmicroregiao_cidade
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbmicroregiao_cidade,1);
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE trigger ttbmicroregiao_cidade_b02i for tbmicroregiao_cidade
active before insert position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( NEW.MICROREGIAO_ID > 0 AND NEW.ID > 0 ) THEN
    BEGIN
        HISTORICO = HISTORICO||' LOCAL INCLUIDO: CIDADE:'||NEW.CIDADE||' - '||NEW.UF||', BAIRRO: '||NEW.BAIRRO;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBMICROREGIAO',NEW.MICROREGIAO_ID, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE trigger ttbmicroregiao_cidade_b03iu for tbmicroregiao_cidade
active before insert or update position 0
AS
DECLARE VARIABLE BAIRRO VARCHAR(100);
BEGIN
    FOR
        SELECT
           BAIRRO

        FROM TBMICROREGIAO_CIDADE T
        WHERE T.UF = NEW.UF
        AND T.CIDADE = NEW.CIDADE
        AND T.BAIRRO = NEW.BAIRRO
        AND T.ID <> NEW.ID

    INTO
    :BAIRRO
    DO BEGIN
        EXCEPTION "..." 'JÁ EXISTE UMA LOCALIDADE COM ESTES DADOS DE UF, CIDADE E BAIRRO';
    END

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE trigger ttbmicroregiao_cidade_b01u for tbmicroregiao_cidade
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (OLD.CIDADE <> NEW.CIDADE) THEN
    BEGIN
        HISTORICO = HISTORICO||' CIDADE:'||OLD.CIDADE||'->'||NEW.CIDADE;
    END

    IF (OLD.BAIRRO <> NEW.BAIRRO) THEN
    BEGIN
        HISTORICO = HISTORICO||' BAIRRO:'||OLD.BAIRRO||'->'||NEW.BAIRRO;
    END

    IF(OLD.UF <> NEW.UF) THEN
    BEGIN
        HISTORICO = HISTORICO||' UF:'||OLD.UF||'->'||NEW.UF;
    END

    IF (HISTORICO <> '') THEN
    BEGIN

        HISTORICO = ' LOCAL: CIDADE:'||OLD.CIDADE||' - '||OLD.UF||', BAIRRO: '||OLD.BAIRRO||' ALTERADO: '||HISTORICO;


        EXECUTE PROCEDURE SPI_HISTORICO('TBMICROREGIAO', NEW.MICROREGIAO_ID, HISTORICO);
    END

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE trigger ttbmicroregiao_cidade_b01d for tbmicroregiao_cidade
active before delete position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( OLD.MICROREGIAO_ID > 0 AND OLD.ID > 0 ) THEN
    BEGIN
        HISTORICO = HISTORICO||' LOCAL EXCLUIDO: CIDADE:'||OLD.CIDADE||' - '||OLD.UF||', BAIRRO: '||OLD.BAIRRO;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBMICROREGIAO',OLD.MICROREGIAO_ID, HISTORICO);
    END
END
^

SET TERM ; ^








