如何在 UTL_FILE 过程中包含一个巨大的 SQL 语句?

Posted

技术标签:

【中文标题】如何在 UTL_FILE 过程中包含一个巨大的 SQL 语句?【英文标题】:How to include a huge SQL statement into UTL_FILE procedure? 【发布时间】:2012-04-09 12:34:22 【问题描述】:

我使用 UTL_FILE 编写了一个程序:

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;

但 Toad 返回警告:已编译但存在编译错误。

有人可以帮我吗?

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

【问题讨论】:

你做了什么,试图找出问题所在? Toad 有没有告诉您哪一行包含问题或任何进一步的细节? 【参考方案1】:

TOAD 应该为您提供编译错误 - 它们可能位于单独的选项卡上(我使用该特定 IDE 已经有一段时间了)。

但是,很容易发现一个大器:我们不能为在 IN 模式中定义的参数赋值。这些参数的目的是调用程序分配它们的值。

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

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

请记住,SQL 将我们限制为每列 4000 个字符。因此,如果 'HUGE SQL STATEMENT' 超过 3993 个字符,您的代码将抛出运行时错误。


如果您犯了这些类型的错误,您可能没有跟上从 PL/SQL 编写文件的复杂性。我建议你阅读this previous answer of mine 和this one 关于这个话题。

【讨论】:

【参考方案2】:

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

/
show errors;

令我印象深刻的编译错误 -

    正在分配参数。这作为“in”参数是非法的。它们似乎不用于输入,因此可能应该从签名中删除它们。如果这是一个代码 sn-p 并且他们确实提供了

【讨论】:

以上是关于如何在 UTL_FILE 过程中包含一个巨大的 SQL 语句?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 Eloquent ORM laravel 选择中包含一个过程?

如何在 maven jar 构建过程中包含外部 jar?

如何在 s-s-rS 订阅的主题行中包含报告参数?

如何映射 URL 中包含斜杠(通配符映射)[重复]

VS2010 如何在项目中包含文件,在构建或发布过程中自动将它们复制到构建输出目录

如何在 laravel 中包含扩展布局文件?