Plsql 如何在UTL_文件过程中包含一个巨大的SQL语句?

Plsql 如何在UTL_文件过程中包含一个巨大的SQL语句?,plsql,utl-file,Plsql,Utl File,我使用UTL_文件编写了一个过程: 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 NVAR

我使用UTL_文件编写了一个过程:

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;
但蟾蜍返回警告:已编译,但有编译错误

有人能帮我吗


因此,我希望在C:/home/S/目录中接收EXT.DAT(和日志)。先谢谢你

蟾蜍应该告诉你编译错误——它们可能在一个单独的选项卡上(我已经有一段时间没有使用那个特定的IDE了)

然而,很容易发现一个初轧机:我们不能为在in模式中定义的参数赋值。这些参数的目的是调用程序分配它们的值

但是,在这种情况下,我认为您需要分配
ddate
filename
,因此您应该将它们从过程的签名中移到其声明部分

sep
我将保留作为参数,但给它一个默认值

请记住,SQL将一列中的字符限制为4000个。因此,如果“庞大的SQL语句”超过3993个字符,您的代码将抛出运行时错误



如果您正在犯这些错误,那么您可能无法跟上从PL/SQL编写文件的复杂过程。我建议您阅读并关注此主题。

您应该能够将此内容附加到脚本的末尾以获取错误(我不使用TOAD,但我希望它能够支持它)。它在最后一段之后

/
show errors;
对我来说最突出的编译错误-

  • 正在将参数指定给。作为“in”参数,这是非法的。它们似乎不用于输入,因此可能应该从签名中删除它们。如果这是一个代码段,并且他们提供

  • 为了找出问题所在,你做了什么?蟾蜍有没有告诉你哪一行包含问题或任何进一步的细节?