2016-05-05 15 views
1

Dies ist der Code, den ich in PL/SQL geschrieben habe Ich versuche, Daten aus einer CSV-Datei zu lesen und in eine Tabelle in einer Oracle-Datenbank einzufügen.Fehler PL/SQL gespeicherte Prozedur

Normalerweise, wenn ich einfügen Zeitstempel Werte ich die folgende

insert into t (start_time) values 
(TO_TIMESTAMP('12-SEP-12 10.31.19','DD-MON-YY HH.MI.SS')) 

Jetzt bin ich Fehler bekommen, von diesen Linien auf den Stationen, wie unten

f_call_start gezeigt: = to_timestamp (substr (L_LINE, Komma2 + 1, Komma3-Komma2-1), 'DD-MON-YY HH.MI.SS'); Error (38,28): PLS-00306: falsche Anzahl oder Arten von Argumenten in Aufruf von 'SUBSTR'

call_record_processor('calldata'); 


create or replace procedure call_record_processor(file_name_input in varchar2) 
is 
l_file UTL_FILE.file_type; 
l_line varchar2(100); 
l_eof boolean:=false; 
comma1 varchar2(10); 
comma2 varchar2(10); 
comma3 varchar2(10); 
comma4 varchar2(10); 

f_source_no call_usage.source_phone_number%type; 
f_dest_no call_usage.destination_phone_number%type; 
f_call_start call_usage.call_start_time%type; 
f_call_end call_usage.call_end_time%type; 

begin 
l_file:=UTL_FILE.fopen('c:\temp\',file_name_input,'r'); 

loop 
    begin 
    utl_file.get_line(l_file,l_line); 
    dbms_output.put_line(l_line); 
    EXCEPTION 
    when no_data_found then 
    exit; 
    end; 
comma1:=INSTR(l_line,',',1,1); 
comma2:=INSTR(l_line,',',1,2); 
comma3:=INSTR(l_line,',',1,3); 
comma4:=INSTR(l_line,',',1,4); 

f_source_no:=SUBSTR(l_line,1,comma1-1); 
dbms_output.put_line('source_phone_number='||f_source_no); 

f_dest_no:=SUBSTR(l_line,comma1+1,comma2-comma1-1); 
dbms_output.put_line('destination_phone_number='||f_dest_no); 

f_call_start:=to_timestamp(substr(l_line,comma2+1,comma3=comma2-1),'DD-MON-YY HH.MI.SS'); 
dbms_output.put_line('call_start_time='||f_call_start); 

f_call_end:=to_timestamp(substr(l_line,comma3+1,comma4-comma3-1),'DD-MON-YY HH.MI.SS'); 
dbms_output.put_line('call_end_time='||f_call_end); 

insert into call_usage values(f_source_no,f_dest_no,f_call_start,f_call_end); 
end loop; 
utl_file.fclose(l_file); 
COMMIT; 
end call_record_processor; 
+0

Sie sein sind fehlt der Unterstrich in 'PUT_LINE'. Nun, jetzt ändern Sie die Frage dynamisch. Früher sagten wir RTFM! für Syntaxfehler! Verbringen Sie ein wenig Zeit, um die Argumente für substr. –

+0

Ja, ich habe diesen sehr dummen Fehler von mir erkannt, aber ich erhalte jetzt den folgenden Fehler. Fehler (38,28): PLS-00306: falsche Anzahl oder Arten von Argumenten im Aufruf von 'SUBSTR' von dieser Zeile auf f_call_start: = to_timestamp (substr (l_line, komma2 + 1, komma3 = komma2-1), 'DD-MON-YY HH.MI.SS'); – pavikirthi

+0

Ja, dass Sie nur selbst aufschauen und eine genauere Frage stellen müssen, wenn sie noch benötigt wird. Wenn Sie sich auf Zeilennummern beziehen, fügen Sie sie vor dem Senden hinzu. Ich bezweifle, dass irgendjemand Zeilen zählen wird. Nicht an einem Donnerstag um 17 Uhr. : -/Hinweis weil ich ein netter Kerl bin: Dein Gleichheitszeichen gehört nicht dazu. –

Antwort

0

Es sollte dbms_output.put_line

+0

Ja, ich erkannte, dass jetzt sehr dummer Fehler, aber ich bekomme den folgenden Fehler jetzt Fehler (38,28): PLS-00306: falsche Anzahl oder Arten von Argumenten im Aufruf von 'SUBSTR' von dieser Linie auf wards f_call_start: = to_timestamp (substr (l_line, komma2 + 1, komma3 = komma2-1), 'DD-MON-YY HH.MI.SS'); – pavikirthi

+0

Können Sie ausdrucken, was ist substr (l_line, komma2 + 1, komma3 = komma2-1)? Das wäre einfacher zu debuggen. Ich denke, das Format der Zeichenkette passt nicht sehr gut in '' DD-MON-YY HH.MI.SS ''. – Dere0405