2016-07-21 16 views
0

Wenn ich diesen Teil meines Codes, der in einem Paket ist, bekomme ich einen Fehler (speziell in der l_cnt := 1_cnt + 1 Zeile aus irgendeinem Grund und der Code abstürzt. Was könnte ich falsch machen? ich versuche, in einer Datei von certs zu lesen Hier ist, was ich bisher.plsql lesen Textdatei in einem Array

v_certList arr_claims_t := arr_claims_t();         


    v_certLst VARCHAR2(2000); 

    f UTL_FILE.FILE_TYPE; 
    s VARCHAR2(200); 


-- used for looping 
l_cnt simple_integer := 0; 

    /*cop procedure*/ 
    PROCEDURE COP_DATALOAD_V2 AS 
    arr_claims arr_claims_t; 
    arr_sql arr_sql_t; 
    BEGIN 

    f := UTL_FILE.FOPEN('V_COP', 
         'certs_file.txt', 
         'R', 
         2500); 

    -- populata our v_certlist of arr_claims_t 

     loop 
     utl_file.get_line(f, s); 
     v_certList.extend(); 
     l_cnt := l_cnt+1; 
     v_certList(l_cnt) := s; 
    end loop; 
    exception 
    when no_data_found then 
     utl_file.fclose(f); 

ich mag das Array succesfuly bevölkerte eine Textdatei angegeben werden (und ich verstehe dies nicht die beste Praxis ist, aber das ist Was ich jetzt tun muss)

+0

Dies ist eine sehr lange Prozedur, so ... das Ende ist irgendwo gegen Ende. Was meinen Sie? Die Schleife läuft bis zur Ausnahme .. richtig? Der Fehler ist: ORA-06512 – qaispak

+0

Ich denke, Sie sind am falschen Ort erweitert. Bitte überprüfen Sie unten: Schleife utl_file.get_line (f, s); l_cnt: = l_cnt + 1; v_certList (l_cnt): = s; v_certList.extend(); Endschleife; – XING

+0

ORA-06512 ist nicht der Fehler, es zeigt nur einen Laufzeitfehler an. Sie brauchen den Rest des Stapels, um zu sehen, was wirklich schief gelaufen ist. –

Antwort

0

Ich habe den Fehler herausgefunden! Das s, das gelesen wurde, war zu groß für das Array, weil die Datei leer war s war enthalten.

v_certList.extend(1); 
     l_cnt := l_cnt + 1; 
     v_certList(l_cnt) := substr(s, 
            0, 
            10) 

Dies repariert es für mich.