Advertisement
erleybru

Untitled

Jul 3rd, 2020
2,141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- lembrar-se de criar o objeto DIRECTORY com as permissoes e nomendo-o de INTERCAMBIO
  2. CREATE OR REPLACE FUNCTION ImportarArquivo
  3. RETURN NUMBER
  4. IS
  5. vArquivo UTL_File.File_Type;
  6. vRegistro   VARCHAR2(250);
  7. vTipoReg    CHAR(1);
  8. vConvenio   VARCHAR2(20);
  9. vAgencia    NUMBER;
  10. vNroConta   NUMBER;
  11. vValor      NUMBER(13,2);
  12. vQtRegistro NUMBER;
  13. vTotalArq   NUMBER(16);
  14. vRet        NUMBER;
  15. BEGIN  
  16.     vRet := 0;
  17.     vQtRegistro := 0;
  18.     vTotalArq := 0;
  19.     -- isto pode ser parametrizado para tornar a funcao mais flexivel
  20.     vArquivo  := UTL_File.Fopen('INTERCAMBIO','debito_automatico.txt', 'r');
  21.     LOOP
  22.         UTL_File.Get_Line(vArquivo, vRegistro);
  23.         vQtRegistro := vQtRegistro + 1;
  24.         vTipoReg := SUBSTR(vRegistro,1,1);
  25.         -- processa o cabecalho
  26.         IF vTipoReg = 'A' THEN
  27.             vConvenio := SUBSTR(vRegistro,3,20);
  28.         END IF
  29.         -- processa o(s) registro(s) detalhe
  30.         IF vTipoReg = 'E' THEN
  31.             vAgencia := SUBSTR(vRegistro,27,4);
  32.             vNroConta := SUBSTR(vRegistro,31,14);
  33.             vValor := SUBSTR(vRegistro,53,15);
  34.             IF SUBSTR(vRegistro,150,1) = '0' THEN
  35.                 UPDATE CORRENTISTA SET Saldo = Saldo - (:vValor / 100) WHERE
  36.                     Agencia = :vAgencia AND ContaNum = :vNroConta
  37.             END IF
  38.         END IF
  39.     END LOOP;
  40.     UTL_File.Fclose(arquivo_ler);
  41.     Dbms_Output.Put_Line('Arquivo processado com sucesso.');
  42.     COMMIT;
  43.     RETURN vRet;
  44.  
  45.     EXCEPTION
  46.     WHEN No_data_found THEN
  47.         UTL_File.Fclose(arquivo_ler);
  48.         COMMIT;
  49.         RETURN -1;
  50.     WHEN UTL_FILE.INVALID_PATH THEN
  51.         Dbms_Output.Put_Line(‘Diretório inválido.');
  52.         UTL_File.Fclose(arquivo_ler)
  53.         RETURN -2;
  54.     WHEN Others THEN
  55.         Dbms_Output.Put_Line ('Problemas na leitura DO arquivo.');
  56.         UTL_File.Fclose(arquivo_ler);
  57.         RETURN -3;
  58. END;
  59. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement