Re: [firebase-br] Duvidas básica

Gladiston Santana via lista <[email protected]> Wed, 12 Nov 2025 11:15:15 -0300
Newsgroups gmane.comp.db.firebase.portuguese
Message-ID <CALv8-NMFu6fmD9p7W_8=nEdzdG5NgEYWECD=1UNQZfaaeNDWXQ@mail.gmail.com>
Voce tem que trabalhar com cursores, open/close, mas apenas ficaria mais
verborr=E1gico, melhor usar cursores usando for/select assim:


EXECUTE BLOCK
RETURNS (
    OUT_ID_CLIENTE_PROCESSADO INTEGER,
    OUT_STATUS_OPERACAO VARCHAR(255)
)
AS
    -- Vari=E1veis locais (mantidas como no exemplo anterior para clareza)
    DECLARE V_CODIGO_CLIENTE     INTEGER;
    DECLARE V_NOME_COMPLETO      VARCHAR(50);
    DECLARE V_DATA_ULTIMA_COMPRA DATE;
    DECLARE V_VALOR_TOTAL_DEBITO NUMERIC(10, 2);
    DECLARE V_CATEGORIA_RISCO    VARCHAR(100);
    DECLARE V_MOTIVO_INATIVACAO  BLOB SUB_TYPE TEXT;

    DECLARE V_DIAS_LIMITE_COMPRA INTEGER =3D 365;
    DECLARE V_VALOR_MAXIMO_DEBITO NUMERIC(10, 2) =3D 50.00;
BEGIN
    FOR
        SELECT
            ID_CLIENTE, NOME_CLIENTE, DATA_COMPRA, VALOR_DEBITO,
CLASSIFICACAO_RISCO, DETALHE_INATIVACAO
        FROM
            CLIENTES
    INTO
        V_CODIGO_CLIENTE, V_NOME_COMPLETO, V_DATA_ULTIMA_COMPRA,
V_VALOR_TOTAL_DEBITO, V_CATEGORIA_RISCO, V_MOTIVO_INATIVACAO
    DO
    BEGIN
        -- L=F3gica da Condi=E7=E3o de Dele=E7=E3o
        IF (DATEADD(DAY, V_DIAS_LIMITE_COMPRA, V_DATA_ULTIMA_COMPRA) <
CURRENT_DATE
            AND V_VALOR_TOTAL_DEBITO > V_VALOR_MAXIMO_DEBITO
            AND V_CATEGORIA_RISCO =3D 'ALTO')
        THEN
        BEGIN
            -- Execu=E7=E3o do DELETE
            DELETE FROM CLIENTES
            WHERE ID_CLIENTE =3D V_CODIGO_CLIENTE;

            -- Sa=EDda de Auditoria/Log (COM ID na mensagem)
            OUT_ID_CLIENTE_PROCESSADO =3D V_CODIGO_CLIENTE;
            OUT_STATUS_OPERACAO =3D 'DELETADO: Cliente ID ' ||
CAST(V_CODIGO_CLIENTE AS VARCHAR(10)) || ' - Inativo por Risco.';
            SUSPEND;
        END
        ELSE
        BEGIN
            -- Sa=EDda de Auditoria/Log (COM ID na mensagem)
            OUT_ID_CLIENTE_PROCESSADO =3D V_CODIGO_CLIENTE;
            OUT_STATUS_OPERACAO =3D 'MANTIDO: Cliente ID ' ||
CAST(V_CODIGO_CLIENTE AS VARCHAR(10)) || ' - Crit=E9rio de exclus=E3o n=E3o
atendido.';
            SUSPEND;
        END
    END
END

Ao inves de excluir, voce pode acrescentar uma coluna para marcar para
exclus=E3o, e depois usar essa coluna para fazer um pente fino para desmarc=
ar
falsos positivos. Excluir diretamente numa tacada s=F3, n=E3o tem volta. Ve=
ja
se sua tabela tem ER (Integridade referencial), excluir um cliente e depois
sumir todos os pedidos, n=E3o ser=E1 agrad=E1vel de explcar depois.
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.fi=
rebase.com.br/fb/artigo.php?id=3D1107
Para consultar mensagens antigas: http://www.firebase.com.br/pesquisa_lista=
.html