2012-04-09 2 views
-1

Ich schrieb ein Verfahren UTL_FILE mit:Wie man eine riesige SQL-Anweisung in die UTL_FILE-Prozedur einfügt?

CREATE OR REPLACE PROCEDURE UTL_CREATE_FILE 
(
     output_file in UTL_FILE.file_type, 
     log_file in UTL_FILE.file_type, 
     filename in VARCHAR2 (64), 
     ddate  in VARCHAR2 (19), 
     sep   in NVARCHAR2 (3) 

) 


    IS 

    BEGIN 


      sep := Chr(9); 
      ddate := TO_CHAR (SYSDATE, 'YYYYMMDD'); 
      filename := 'EXT' || ddate || '.dat'; 
      output_file := UTL_FILE.fopen ('C:/home/S/', filename, 'w', 32000); 
      log_file := UTL_FILE.fopen ('C:/home/S/', 'WEEKLY.log', 'a', 32000); 

      UTL_FILE.put_line (log_file, TO_CHAR (SYSDATE, 'DD-MM-YYYY HH24:MI:SS') || 'Started with file ' || filename); 

    select 'HUGE SQL STATEMENT'|| sep || 'Anykey' as OUTLINE from DUAL; 
      UTL_FILE.put_line (output_file, OUTLINE); 
      UTL_FILE.fclose (output_file); 
      UTL_FILE.put_line (log_file, TO_CHAR (SYSDATE, 'DD-MM-YYYY HH24:MI:SS') || 'Finished for file ' || filename); 
      UTL_FILE.fclose (log_file); 
    END; 

Aber Toad gibt Warnung: kompiliert aber mit Kompilierungsfehlern.

Könnte mir jemand helfen?

Als Ergebnis möchte ich eine EXT.DAT (und logs) in C:/home/S/Verzeichnis erhalten. Vielen Dank im Voraus.

+0

Was haben Sie getan, um zu versuchen und herauszufinden, was das Problem ist? Hat Toad Ihnen gesagt, welche Zeile das Problem oder weitere Details enthielt? –

Antwort

1

TOAD sollte Ihnen die Kompilierungsfehler geben - sie sind wahrscheinlich auf einem separaten Tab (es ist eine Weile her, seit ich diese bestimmte IDE verwendet habe).

Es ist jedoch leicht, einen Bloomer zu erkennen: Wir können den im IN-Modus definierten Parametern keine Werte zuweisen. Der Zweck solcher Parameter ist, dass das aufrufende Programm ihre Werte zuweist.

Allerdings denke ich, dass Sie ddate und filename zuweisen müssen, also sollten Sie sie aus der Signatur der Prozedur und in den Deklarationsabschnitt verschieben.

sep Ich würde als Parameter beibehalten, aber geben Sie einen Standardwert.

Bedenken Sie, dass SQL uns auf 4000 Zeichen in einer Spalte beschränkt. Wenn also 'HUGE SQL STATEMENT' 3993 Zeichen überschreitet, wird Ihr Code einen Laufzeitfehler verursachen.


Wenn Sie diese Art von Fehler machen bist du wahrscheinlich nicht up-to-Geschwindigkeit mit den Feinheiten von Dateien von PL/SQL zu schreiben. Ich schlage vor, Sie lesen this previous answer of mine und auch this one zu diesem Thema.

0

Sie sollten in der Lage sein, dies an das Ende Ihres Skripts anzuhängen, um die Fehler zu erhalten (ich verwende TOAD nicht, aber ich würde erwarten, dass es das unterstützt). Es geht nach dem letzten Ende ;.

/ 
show errors; 

Die Kompilierungsfehlern, die mir auffallen -

  1. Die Parameter zugeordnet werden. Dies ist als "in" -Parameter illegal. Sie scheinen nicht für die Eingabe verwendet zu werden, daher sollten sie wahrscheinlich aus der Signatur entfernt werden. Wenn dies ein Code-Snippet ist und sie tun
+0

Vielen Dank. – May12

Verwandte Themen