在循环中调用 utl_file.put 时 UTL_FILE.WRITE_ERROR

2023-12-07

我的 PL/SQL 过程中有以下代码,我在 API_XXX.put 中调用了它(它调用utl_file.put)在 while 循环中。 l_xmldoc 是来自 getReportXML 函数的 CLOB,该函数返回 xml clob。

我编写的将 xml 写入文件的代码如下:

l_offset := 1;
    WHILE (l_offset <= l_length)
    LOOP
    l_char := dbms_lob.substr(l_xmldoc,1,l_offset);

    IF (l_char = to_char(10))  ---I also tried if (l_char=chr(10)) but it did not work 
    THEN
        API_XXXX.new_line(API_XXX.output, 1);
    ELSE
        API_XXXX.put(fnd_API_XXX.output, l_char);
    END IF;

    l_offset := l_offset + 1;
    END LOOP;

请注意,API_XXX 是我无法修改的现有包,并且这个API调用fflush在最后put.

API_XXX.put的部分如下(“WHICH”是第一个参数):

         elsif WHICH = API_XXX.OUTPUT then
           temp_file := OUT_FNAME;
           utl_file.put(F_OUT, BUFF);
           utl_file.fflush(F_OUT);

API_XXX.new_line就像(LINES 是要写入的行数):

         elsif WHICH = API_XXX.OUTPUT then
           temp_file := OUT_FNAME;
           utl_file.new_line(F_OUT, LINES);
           utl_file.fflush(F_OUT);

我注意到客户方的 put/new_line 过程有时会引发UTL_FILE.WRITE_ERROR由于未知原因(可能是由于我的客户的 while 循环中的 l_length 太大(最多 167465))。

I read Oracle PL/SQL UTL_FILE.PUT 缓冲。我发现这是同样的原因,我的 l_xmldoc 非常大,当我循环它时,我发现它没有换行符,所以缓冲区高达 32767,即使我每次都 fflush。

那么,我应该如何将 l_xmldoc 转换为带有换行符的 varchar 。

PS:我确认我的客户正在使用Oracle 11g


  1. 贴出你使用的Oracle版本!或者我们可以猜测一下......

  2. Your fflush不会像你期望的那样工作 - 来自文档:

    FFLUSH 将挂起的数据物理写入由文件句柄标识的文件。通常,写入文件的数据会被缓冲。 FFLUSH 过程强制将缓冲数据写入文件。数据必须以换行符终止。

  3. 骨头绝对正确,TO_CHAR(10) 行是错误的!你试一试SELECT TO_CHAR(10) FROM DUAL;你会得到10然后将其与单个字符进行比较。单个字符永远不会是“10”,因为 10 有两个字符!

  4. 您的问题很可能是 XML 文件太大导致缓冲区溢出,但请记住,目标系统上的其他问题也可能导致 write_errors,应该对此进行处理。

解决方案

  • 快又脏:由于您似乎并不关心性能,因此您可以每隔 X 字节关闭文件并使用 A 重新打开它进行追加。所以只需添加到循环中:

    IF MOD( l_offset, 32000 ) = 0
    THEN
      UTL_FILE.FCLOSE( f_out );
      UTL_FILE.FOPEN( out_fpath, out_fname, f_out, 'a', 32767 );
    END IF;
    
  • 使用正确的工具完成正确的工作:UTL_FILE不适合处理复杂的数据。 UTL_FILE 的唯一用例是用换行符分隔的小文本行。对于其他所有内容,您应该写入原始字节! (这也将允许您对编码进行适当的控制,目前这只是迷你幸运的猜测)

  • 使用 NIO-Filechannels 编写 Java 存储过程 - 快速、安全、美观...但是要小心,您的程序运行速度可能会快 10 倍!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在循环中调用 utl_file.put 时 UTL_FILE.WRITE_ERROR 的相关文章

  • 获取一组记录之间的时间差

    我有一个具有以下结构的表 ID ActivityTime Status 19 2013 08 23 14 52 1 19 2013 08 23 14 50 1 19 2013 08 23 14 45 2 19 2013 08 23 14 3
  • db2中如何删除所有非数字字母

    我在 DATA 列 varchar 中有一些数据 如下所示 Nowshak 7 485 m Maja e Korabit Golem Korab 2 764 m Tahat 3 003 m Morro de Moco 2 620 m Cer
  • 日志中每天的每周活跃用户数

    我想知道是否有人可以帮助我使用一些 SQL 来返回两天或更长时间内登录到数据库表的唯一用户数量 让我们使用 7 天作为参考 我的日志表在每一行中包含时间戳 ts 和 user id 表示该用户当时的活动 以下查询返回此日志中的每日活跃用户数
  • 如何从 SQL Server 中的 SELECT 进行更新?

    In SQL服务器 可以将行插入到带有INSERT SELECT陈述 INSERT INTO Table col1 col2 col3 SELECT col1 col2 col3 FROM other table WHERE sql coo
  • 如何在事务中使用链接服务器插入远程表?

    我的链接服务器设置正确 我能够执行以下查询 插入 远程服务器 表 SELECT FROM 本地服务器 表 然而当我做同样的事情时交易内 开始传输 插入 远程服务器 表 SELECT FROM 本地服务器 表 提交交易 我收到类似的错误 用于
  • PLS-00103:遇到符号“;”当预期出现以下情况之一时:

    我正在尝试插入用户安全问题的答案 以用于密码重置功能 Ellucian 横幅 v8 提供了一个用于运行此 API 的 API 我对他们的 API 非常陌生 从下面的错误消息来看 我还远远没有正确运行它 任何帮助表示赞赏 我尝试在 Oracl
  • MySQL 最佳实践:SELECT 子递归尽可能提高性能?

    我想选择一个根项目及其子项 使其性能尽可能高 我更喜欢使用嵌套集模型 但这次表结构遵循邻接模型 有关嵌套集和邻接模型的更多信息 http mikehillyer com articles managing hierarchical data
  • 如何根据条件删除结果以计算平均值

    我有下面的架构 对其的快速解释是 鲍勃评分为 5 5 詹姆斯评分 1 5 梅西百货评分高达 5 5 逻辑 如果我是 A 请查找我屏蔽的所有人 查阅所有电影评论 任何留下电影评论且 personA 已屏蔽的人 请将其从计算中删除 计算电影的平
  • 如何在 SQL Server 中保持数据行内

    我正在尝试找出如何检测数据是否在VARCHAR n SQL Server 2008 中的列存储在行内或行外 有谁知道如何做到这一点 另外 如果我们需要数据 有没有办法将数据保持在行中 要查看某个值是行内还是行外 您可以使用DBCC PAGE
  • Postgresql 串行错误自动增量

    我在 postgresql 上遇到问题 我认为 postgresql 中有一个错误 我错误地实现了一些东西 有一个表包括colmn1 primary key colmn2 unique colmn3 插入一行后 如果我尝试使用现有的另一次插
  • Oracle如何将UTC时间转换为本地时间(缺少偏移信息)

    我有一个包含日期列的表 我认为该列中的日期是以 UTC 格式保存的 我希望检索日期时以当地时间打印 这意味着当我从德国调用日期时 结果应该是这样的 2015 04 29 11 24 06 0200UTC EUROPE BERLIN 我尝试了
  • sql join 告诉我 ID 是否存在于其他表中

    我有 2 张桌子 A B ID FKID 1 3 2 3 3 4 4 4 我需要一个 select 语句 它显示 A 的所有内容 其中一个字段告诉我表 B 是否有任何与该 ID 匹配的 id Desired Result ID hasB 1
  • Postgres LIMIT/OFFSET 奇怪的行为

    我正在使用 PostgreSQL 9 6 我有一个这样的查询 SELECT anon 1 id AS anon 1 id anon 1 is valid AS anon 1 is valid anon 1 first name AS ano
  • Oracle 删除约束级联等效于 Sql Server

    在Oracle中 删除约束PK SAI我使用语法 ALTER TABLE SAISIE DROP CONSTRAINT PK SAI CASCADE SQL Server 中与此等效的是什么 您正在考虑与实际 DELETE 语句相关的 FO
  • 如何检查oracle数据库中分配给模式、角色的对象的权限(DDL、DML、DCL)?

    大多数时候 我们都在与愚蠢的事情作斗争 以获取架构 角色及其对象的权限详细信息 并尝试找到一些简单的方法来获取有关它的所有详细信息以及伪查询代码 以批量生成授予语句以供进一步使用执行 所以我们在这里得到它 关于数据字典视图前缀的一些简单介绍
  • 如何比较行内的重叠值?

    我似乎对这个 SQL 查询有问题 SELECT FROM appts WHERE timeStart gt timeStart AND timeEnd lt timeEnd AND dayappt boatdate 时间格式为军用时间 物流
  • nvarchar 值“3001822585”的转换溢出了 int 列

    我使用以下方法将 Excel 文件导入到 SQL Server Excel 文件将所有值作为字符串 我可以导入文件 除了Barcode SalePrice and Price2 我收到错误 nvarchar 值 3001822585 条形码
  • Oracle 按月滚动或运行总计

    目标 每个月末所有报表的滚动 运行总计 Code select TRUNC ACTHX STMT HX STMT DATE MM AS MNTH COUNT ACTHX INVOICE as STMTS from ACTHX group b
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • RANK() OVER PARTITION 并重置 RANK

    如何获得在分区更改时重新启动的 RANK 我有这张表 ID Date Value 1 2015 01 01 1 2 2015 01 02 1

随机推荐

  • 将 Swift 3 升级到 4,Swift 扩展不再出现在 Objective C 中

    我刚刚完成将混合语言项目 objective c 和 Swift 从 Swift 3 升级到 Swift 4 一切似乎都很顺利 除了我所有的 Swift 扩展都无法再在 Objective C 中访问 我不知道如何获得anySwift 扩展
  • 来自另一个类库的基本控制器在 Web api 中不起作用

    我有两个 Web API 项目 还有一个MarketController我需要扩展 Api 控制器 所以我做到了 我创建了一个BaseController类并继承自ApiController像这样 public class BaseCont
  • 计算数百 GB 数据中的子序列

    我正在尝试处理一个非常大的文件并计算文件中特定长度的所有序列的频率 为了说明我正在做的事情 请考虑一个包含序列的小输入文件abcdefabcgbacbdebdbbcaebfebfebfeb 下面 代码读取整个文件 并获取长度为 n 的第一个
  • 如何在 AngularJS 中检索之前的 URL

    我知道我可以使用获取当前 URL location search and location path 但我需要一种方法来获取上一个 我可以使用全局变量或类似的变量吗 Angular rootScope将拥有所有应用程序组件的所有信息 下面在
  • 将儒略日转换为日/月/年

    我的帖子显然不清楚 所以我正在努力修复它 如果我仍然不清楚 请随时告诉我 我得到了一个物理变量的数据框 每分钟都有一个数据 我想将前 4 列转换为单个列 R 中的 d m Y H M GMT Year Julian day Hour Min
  • 如果 Visual Studio 2012 / 2013 中的项目/解决方案中缺少文件,则报告错误/警告

    视觉工作室不再支持宏 因此以下问题中的答案仅对以前的版本有效 如果 Visual Studio 中的项目 解决方案中缺少文件 则报告错误 警告 当您构建缺少文件的解决方案时 Visual Studio 2012 2013 是否可以报告错误
  • 在目标包含源的情况下使用 strncpy()

    我用 C 编写了一个函数来修剪字符串中的空白字符 我关心的是最后一行trim 下面的函数 其中源包含在目标中 测试用例以及其他一些测试结果都很好 复制源和目标位于同一内存中的字符串的全部或部分会导致奇怪的问题吗 源代码 include
  • ORM 学说中的 Substring_index 函数

    我必须使用SUBSTRING INDEXsymfony 2 中的学说 ORM 函数 我该怎么做 现在在查询中使用它会出现未定义的函数错误 Syntax Error line 0 col 299 Error Expected known fu
  • Django:模板中的嵌套变量

    在我的 django 登录模板之一中 有一行
  • 将 ImageData 对象(不是画布)转换为图像 dataURL

    我想从 ImageData 对象 即宽度 高度 数据 创建 dataURL 我意识到画布有这个 但我想避免扭曲画布使用 主要是alpha预乘 即我想避免明显的canvas putImageData步骤 From 这个帖子我可以将任何 arr
  • TensorFlow 图内复制示例

    我想在具有多个 ps 和工作线程的多 GPU 集群中试验 TensorFlow 的图内复制 这CIFAR 10 多 GPU 示例图中显示了单台机器上的同步复制 有没有可用的示例可供我参考 例如图间训练的示例训练程序 一般来说 对于分布式训练
  • 如何在 WSO2 Micro Integrator 中跳过 CSV 文件中的标题

    我正在使用 smooks mediator 使用 VFS 将 csv 文件转换为 json 我们可以选择在使用 CSV 连接器 模块时跳过标题行 使用 smooks 在 WSO2 Integration studio 中处理文件时如何跳过第
  • 如何获取每个外键的最小日期记录的记录 ID?

    我有下表 recordID createdDate ForeignKeyID 00QA000000PtFXaMAN 2012 01 03 13 23 36 000 001A000000ngM21IAE 00QA000000OS2QiMAL
  • REST Web api URL GET 使用字符串而不是 id 未按预期路由

    我有以下示例 其中请求是http domain api foo username 但我收到了 404 状态代码 此控制器上不存在其他 Get 操作 这不应该起作用吗 public class FooController ApiControl
  • 使用 Swift 进行水平滚动

    我怎样才能找到教程或其他东西来帮助我创建这样的东西可滚动的下图中使用 Swift 标记的区域 谢谢 None
  • 如何使用vbs或批处理脚本在特定时间关闭电脑

    我想要一个脚本放在启动文件夹中并且不使用任务计划程序 If time gt 22 00 hrs shutdown if startup after 10pm Shutdown s f break While time 22 00hrs lo
  • 使用 JavaFx Scene Builder 2.0 “全屏”同时显示两个窗口

    我正在开发一个迷你应用程序 我需要在全屏上同时向用户显示 2 个窗口 该应用程序将为双屏用户制作 我正在 NetBeans 8 0 1 上使用 JavaFx Scene Builder 2 0 我尝试了这个 但只有第二个窗口显示在全屏上 p
  • 当另一个表中值为 null 时重定向到页面 laravel

    如果我的additional infos 表包含一些在本例中为空的内容 联系人 姓名和地址 我会尝试将用户重定向到另一个页面 我现在已经做了类似的事情 但即使联系人 姓名和地址已填写 它仍然将我重定向到另一个页面 有人能帮我吗 提前致谢 p
  • 在 R 循环中命名文件

    我有多个音频文件 它们保存在我的工作目录中的几个子文件夹中 我有一个循环 它读取每个文件的第一分钟 然后将它们保存为新文件 library tuneR dir create New files FILES lt list files PAT
  • 在循环中调用 utl_file.put 时 UTL_FILE.WRITE_ERROR

    我的 PL SQL 过程中有以下代码 我在 API XXX put 中调用了它 它调用utl file put 在 while 循环中 l xmldoc 是来自 getReportXML 函数的 CLOB 该函数返回 xml clob 我编