2012-04-09 11 views
-1

は私がUTL_FILEを使用して手順を書いた:UTL_FILEプロシージャに巨大なSQL文を含めるには?

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; 

をしかしヒキガエルは警告を返します。コンパイルが、コンパイルエラーと。

誰かが私を助けることができますか?

私はEXT.DAT(とログ)をC:/ home/S /ディレクトリに受け取りたいと思います。前もって感謝します。

+0

何が問題を解決しようとしていますか? Toadは問題を含む行や詳細を教えてくれましたか? –

答えて

1

TOADはコンパイルエラーを表示するはずです。これらはおそらく別のタブにあります(このIDEを使用してからしばらくしています)。

しかし、1つのブルームを見つけるのは簡単です.Inモードで定義されたパラメータに値を割り当てることはできません。そのようなパラメータの目的は、呼び出しプログラムが値を割り当てていることです。

しかし、この場合はddatefilenameを割り当てる必要があるので、プロシージャの署名から宣言セクションに移動する必要があります。

sep私はパラメータとして保持しますが、デフォルト値を与えます。

SQLでは、列で4000文字に制限されています。したがって、 'HUGE SQL STATEMENT'が3993文字を超えると、コードは実行時エラーを引き起こします。


これらの種類のエラーを作成している場合は、PL/SQLからファイルを書き込む複雑さに敏感ではないでしょう。このトピックに関しては、this previous answer of minethis oneとお読みください。

0

スクリプトの最後にこれを追加してエラーを取得する必要があります(私はTOADを使用しませんが、サポートすると思います)。それは最後の終わりを過ぎます。

/ 
show errors; 

私に目立つのコンパイル・エラー -

  1. パラメータが割り当てられています。これは "in"パラメータとしては不正です。彼らは入力のために使用されていないようですので、おそらく署名から削除する必要があります。これがコードスニペットであり、それらがproviである場合
+0

ありがとうございました。 – May12

関連する問題