DECLARE
  v_id number;
  v_data_movimentacao DATE;
  v_hora_movimentacao TIMESTAMP;
  v_bank_emissor_id Number;
  v_investidor VARCHAR2(100);
  v_cpf_cnpj_investidor VARCHAR2(20);
  v_instrumento VARCHAR2(100);
  v_quantidade NUMBER(10);
  v_tipo_movimentacao VARCHAR2(20);
  v_valor_movimentado NUMBER(18,2);
  v_valor_total_atualizado NUMBER(18,2);
  v_observacoes VARCHAR2(200);
  v_max_id number;
BEGIN

  select nvl(max(id),0) into v_max_id from findata.operacoes;

  FOR i IN 1..1000 LOOP
    v_id := (v_max_id+i);
    v_data_movimentacao := TRUNC(SYSDATE) - DBMS_RANDOM.VALUE(1, 100);
    v_hora_movimentacao := TO_TIMESTAMP(TO_CHAR(SYSDATE - DBMS_RANDOM.VALUE(1, 86400), 'DD/MM/YYYY HH24:MI:SS'), 'DD/MM/YYYY HH24:MI:SS');
    v_bank_emissor_id := round(DBMS_RANDOM.VALUE(1, 353));
    v_investidor := 'Investidor ' || i;
    v_cpf_cnpj_investidor := CASE MOD(i, 2) WHEN 0 THEN '111.111.111-11' ELSE '222.222.222-22' END;
    v_instrumento := 'CDB prefixado com vencimento em 22/03/2025';
    v_quantidade := DBMS_RANDOM.VALUE(1, 100);
    v_tipo_movimentacao := CASE MOD(i, 2) WHEN 0 THEN 'Resgate' ELSE 'Aplicacao' END;
    v_valor_movimentado := DBMS_RANDOM.VALUE(1000, 100000);
    v_valor_total_atualizado := v_valor_movimentado + DBMS_RANDOM.VALUE(0, 1000);
    v_observacoes := NULL;
    INSERT INTO findata.operacoes (id, data_movimentacao, hora_movimentacao,  bank_emissor_id, investidor_nome, investidor_cpf_cnpj, instrumento, quantidade, tipo_movimentacao, valor_movimentado, valor_total_atualizado, observacoes)
    VALUES (v_id, v_data_movimentacao, v_hora_movimentacao,  v_bank_emissor_id, v_investidor, v_cpf_cnpj_investidor, v_instrumento, v_quantidade, v_tipo_movimentacao, v_valor_movimentado, v_valor_total_atualizado, v_observacoes);
  END LOOP;
  COMMIT;
END;
/