Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- lembrar-se de criar o objeto DIRECTORY com as permissoes e nomendo-o de INTERCAMBIO
- CREATE OR REPLACE FUNCTION ImportarArquivo
- RETURN NUMBER
- IS
- vArquivo UTL_File.File_Type;
- vRegistro VARCHAR2(250);
- vTipoReg CHAR(1);
- vConvenio VARCHAR2(20);
- vAgencia NUMBER;
- vNroConta NUMBER;
- vValor NUMBER(13,2);
- vQtRegistro NUMBER;
- vTotalArq NUMBER(16);
- vRet NUMBER;
- BEGIN
- vRet := 0;
- vQtRegistro := 0;
- vTotalArq := 0;
- -- isto pode ser parametrizado para tornar a funcao mais flexivel
- vArquivo := UTL_File.Fopen('INTERCAMBIO','debito_automatico.txt', 'r');
- LOOP
- UTL_File.Get_Line(vArquivo, vRegistro);
- vQtRegistro := vQtRegistro + 1;
- vTipoReg := SUBSTR(vRegistro,1,1);
- -- processa o cabecalho
- IF vTipoReg = 'A' THEN
- vConvenio := SUBSTR(vRegistro,3,20);
- END IF
- -- processa o(s) registro(s) detalhe
- IF vTipoReg = 'E' THEN
- vAgencia := SUBSTR(vRegistro,27,4);
- vNroConta := SUBSTR(vRegistro,31,14);
- vValor := SUBSTR(vRegistro,53,15);
- IF SUBSTR(vRegistro,150,1) = '0' THEN
- UPDATE CORRENTISTA SET Saldo = Saldo - (:vValor / 100) WHERE
- Agencia = :vAgencia AND ContaNum = :vNroConta
- END IF
- END IF
- END LOOP;
- UTL_File.Fclose(arquivo_ler);
- Dbms_Output.Put_Line('Arquivo processado com sucesso.');
- COMMIT;
- RETURN vRet;
- EXCEPTION
- WHEN No_data_found THEN
- UTL_File.Fclose(arquivo_ler);
- COMMIT;
- RETURN -1;
- WHEN UTL_FILE.INVALID_PATH THEN
- Dbms_Output.Put_Line(‘Diretório inválido.');
- UTL_File.Fclose(arquivo_ler)
- RETURN -2;
- WHEN Others THEN
- Dbms_Output.Put_Line ('Problemas na leitura DO arquivo.');
- UTL_File.Fclose(arquivo_ler);
- RETURN -3;
- END;
- /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement