[firebase-br] Duvidas básica
Gladiston Santana
gladiston.santana em gmail.com
Quarta Novembro 12 11:15:15 -03 2025
Voce tem que trabalhar com cursores, open/close, mas apenas ficaria mais
verborrágico, melhor usar cursores usando for/select assim:
EXECUTE BLOCK
RETURNS (
OUT_ID_CLIENTE_PROCESSADO INTEGER,
OUT_STATUS_OPERACAO VARCHAR(255)
)
AS
-- Variáveis 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 = 365;
DECLARE V_VALOR_MAXIMO_DEBITO NUMERIC(10, 2) = 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ógica da Condição de Deleção
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 = 'ALTO')
THEN
BEGIN
-- Execução do DELETE
DELETE FROM CLIENTES
WHERE ID_CLIENTE = V_CODIGO_CLIENTE;
-- Saída de Auditoria/Log (COM ID na mensagem)
OUT_ID_CLIENTE_PROCESSADO = V_CODIGO_CLIENTE;
OUT_STATUS_OPERACAO = 'DELETADO: Cliente ID ' ||
CAST(V_CODIGO_CLIENTE AS VARCHAR(10)) || ' - Inativo por Risco.';
SUSPEND;
END
ELSE
BEGIN
-- Saída de Auditoria/Log (COM ID na mensagem)
OUT_ID_CLIENTE_PROCESSADO = V_CODIGO_CLIENTE;
OUT_STATUS_OPERACAO = 'MANTIDO: Cliente ID ' ||
CAST(V_CODIGO_CLIENTE AS VARCHAR(10)) || ' - Critério de exclusão não
atendido.';
SUSPEND;
END
END
END
Ao inves de excluir, voce pode acrescentar uma coluna para marcar para
exclusão, e depois usar essa coluna para fazer um pente fino para desmarcar
falsos positivos. Excluir diretamente numa tacada só, não tem volta. Veja
se sua tabela tem ER (Integridade referencial), excluir um cliente e depois
sumir todos os pedidos, não será agradável de explcar depois.
Mais detalhes sobre a lista de discussão lista