Olá, Gabriel, tudo bem?
Peço desculpas pela demora no retorno.
Uma forma que encontrei para alterar as categorias das empresas já existentes no banco de dados é utilizando trigger.
O instrutor criou uma PROCEDURE para que manualmente fosse atualizado às categorias de clientes já existentes no banco de dados, a procedure criada foi a atualizar_faturamento_previsto:
create or replace PROCEDURE ATUALIZAR_FATURAMENTO_PREVISTO (
p_id in cliente.id%type,
p_faturamento_previsto in cliente.faturamento_previsto%type
)
IS
v_categoria cliente.categoria%type;
e_error_id exception;
BEGIN
v_categoria := obter_categoria_cliente(p_faturamento_previsto);
UPDATE cliente
SET categoria = v_categoria,
faturamento_previsto = p_faturamento_previsto
WHERE id = p_id;
IF SQL%NOTFOUND THEN
RAISE e_error_id;
END IF;
EXCEPTION
WHEN e_error_id then
raise_application_error(-20010,'Cliente inexistente');
END;
Está procedure recebe como parâmetro o ID
e o faturamento previsto
de um cliente, onde o faturamento previsto
é passado para a função obter_categoria_cliente
v_categoria := categoria_cliente(p_faturamento_previsto);
É retornado a nova categoria do cliente para a procedure atualizar_faturamento_previsto que realiza a atualização no banco de dados:
UPDATE cliente
SET categoria = v_categoria,
faturamento_previsto = p_faturamento_previsto
WHERE id = p_id;
Para que a procedure atualizar_faturamento_previsto seja executa automaticamente para realizar a verificação e atualização dos valores, podemos utilizar trigger:
create or replace TRIGGER TG_ATUALIZA_CATEGORIA
AFTER INSERT ON CLIENTE
DECLARE
CURSOR cur_CLIENTE IS SELECT ID, faturamento_previsto FROM CLIENTE;
v_faturamento_previsto cliente.faturamento_previsto%type;
v_ID cliente.id%type;
BEGIN
OPEN cur_CLIENTE;
LOOP
FETCH cur_CLIENTE INTO v_ID,v_faturamento_previsto ;
EXIT WHEN cur_CLIENTE%NOTFOUND;
ATUALIZAR_FATURAMENTO_PREVISTO( p_id => v_ID, p_faturamento_previsto => v_faturamento_previsto);
END LOOP;
CLOSE cur_CLIENTE;
END;
Foi criada uma trigger, onde um cursor foi declarado para percorrer toda a tabela e buscar o ID
e o faturamento previsto
de cada cliente. Os valores armazenados nas variáveis v_faturamento_previsto
e v_ID
é passado para procedure atualizar_faturamento_previsto
, que realiza a atualização das categorias dos clientes já existentes no banco de dados:
ATUALIZAR_FATURAMENTO_PREVISTO( p_id => v_ID, p_faturamento_previsto => v_faturamento_previsto);
Qualquer dúvida é só falar e bons estudos!