Plsql 如何在UTL_文件过程中包含一个巨大的SQL语句?
我使用UTL_文件编写了一个过程: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
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;
对我来说最突出的编译错误-
为了找出问题所在,你做了什么?蟾蜍有没有告诉你哪一行包含问题或任何进一步的细节?