- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个(!)客户将 Oracle CLOB 字段设置为 NULL 失败,并显示
[FireDAC][Phys][Ora] ORA 22275 - Invalid LOB locator specified
发送到数据库的查询*是
update tt_hrs set
TT_INFO = ?
where
TT_HRS_ID = ?
Params:
0 - : <NULL>
1 - : 276727
通过 FireDAC 查询数据集显示,字段 TT_HRS
的 lDataset.Fields[i].DataType
为 ftWideMemo
。
我在互联网上找到的许多内容都与更新您使用的 CLOBS 的“旧方法”(Oracle 8.0.5 IIRC)相关
UPDATE ClobTable
SET
Value = EMPTY_CLOB()
WHERE
Id = :Id
RETURNING
Value
INTO
:Value
但据我所知,不再需要此类声明。
在 SQLPLUS 中,我可以在我们自己的 Oracle 12c 数据库上毫无问题地执行这些操作,因此 the difference between EMPTY_CLOB()
and NULL
似乎并不重要:
update tt_hrs set tt_info='test' where tt_hrs_id=276727;
update tt_hrs set tt_info=NULL where tt_hrs_id=276727;
update tt_hrs set tt_info=empty_clob() where tt_hrs_id=276727;
问题:
Oracle 设置中是否有任何内容可以解释此行为?
也许他们设置了一些“兼容模式”来支持旧应用程序之类的...我对 Oracle 不太熟悉。
注意:它绝不会与 2 字节字符 I reported earlier 的问题有关。 ?
在这里捕获救命稻草......
* 我们可以记录这一点,因为我们有一个 TDataSetProvider 后代,它记录在重写的 DoBeforeExecute
中发送的内容。
最佳答案
我们一直无法找到此问题的确切原因,但已找到解决方法。
受影响的代码都通过 TClientDataSet
工作,并且我们已经使用了 TDataSetProvider
后代以及覆盖的 DoBeforeExecute
来记录发送到的实际 SQL数据库(用于调试目的)。这在我们的代码中调用了一个日志记录过程,并且我们添加了以下内容:
// Force parameter to ftOraClob when NULL:
if TFDQuery(TDataSetProvider(Sender).Dataset).Connection.Params.DriverID = S_FD_OraId then
for i := 0 to params.count-1 do
if (params[i].DataType = ftMemo) and (VarIsNull(params[i].Value) or VarIsClear(params[i].Value)) then
params[i].DataType := ftOraClob;
这会强制 Datasnap.Provider.pas
中的 TSQLResolver.GenUpdateSQL
中的 AddField
子例程遵循以下路径:
else if UseFieldInUpdate(Field) then
begin
Result := True;
if (Field.DataType = ftOraClob) and (not InformixLob) then
begin
NoParam := True;
if InObject then
SQL.Add(string.Format(' %s.%s = EMPTY_CLOB(),', [Alias, QuoteFullName(Field.FullName, PSQLInfo(Tree.Data).QuoteChar), { Do not localize }
Field.FullName]))
从而编写 = EMPTY_CLOB()
而不是 = NULL
,Oracle DB 乐意接受。
注意:我们测试 ftMemo 因为我们有一个活跃的映射规则,上面写着
with AConnection.FormatOptions.MapRules.Add do
begin
SourceDataType := dtWideHMemo;
TargetDataType := dtMemo;
end;
(参见 https://stackoverflow.com/a/47904988/512728 )
如果您没有这个,则需要测试 ftWideMemo
。
关于oracle - 将 Oracle CLOB 字段设置为 null 失败,出现 ORA 22275,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52061416/
我正在尝试将作为 StrignBuffer 的 XML 响应保存到方法中。 我需要将此字符串数据作为 CLOB 保存到 Sql 并检索相同的数据。 响应最大3-4Kb,需要再次检索到StringBuf
我目前正在使用 oracle.sql.CLOB 绑定(bind)到 Oracle Clob。 使用有什么好处 java.sql.Clob clob = con.createClob(); 而不是使用创
我想更新一列是CLOB类型,方法如下; public boolean formVeriGuncelleSil(String sql) throws VeritabaniException {
我猜这是一个反复出现的问题,但还没有找到合适的解决方案。基本上,我试图通过 DB2 过程将有点大的 XML,即 32000 多个字符插入到 CLOB 列中。插入失败并显示以下错误看起来 DB2 正在将
我最近升级了一个应用程序以使用 JAVA 7 和 JBoss 7.1.1 运行该应用程序最初是在 JAVA 5 和 Jboss 4.2.2 上开发的。此应用程序使用 hibernate 3 进行持久化
一些背景:数据库是甲骨文。我正在尝试为表格的每一行创建一个分隔字符串。分隔字符串的某些值必须来自 CLOB(包含 XML)。 CLOB 在某些行上可能为空,这就是问题所在。 例如,我有一个表:'Ite
我有一个很大的 CLOB(超过 32kB),我想使用 StringBuilder 将其读取到字符串中。我如何以最有效的方式做到这一点?我不能为 StringBuilder 使用“int length”
我在 Oracle 11GR2 上使用最新版本的 DBUnit (2.4.7)。我正在使用 Java 6 (1.6.0_15) 和最新版本的 Oracle 客户端 jar (jdbc6.jar) 我一
关于这个主题有很多类似的问题,但我找不到任何解决方案,考虑到最终结果对于 varchar2 来说太大。 所以我想要做的是改变这一点: Column1 | Column2 -------- ------
我们正在尝试在 CLOB 字段中应用子字符串函数来修剪前 4000 个字符。我们收到以下错误消息。 下面是我们正在使用的查询: select cast(substr(field_name,1,4000
我有一个字符串“stringData”,我想将其转换为 Clob,你能帮我吗? 我已经尝试过: Clob clob = new SerialClob(stringData.toCharArray())
我对 CLOB 类型的数据对象不熟悉。我正在使用JAVA编程语言来编码。 我的问题是如何将音频文件转换为 CLOB? 我应该将文件转换为字符数组吗?或者还有其他办法吗? 谁能指导我完成此操作的教程吗?
我知道它可以通过使用 SQL 来实现 update activity set REFERENCE = EMPTY_CLOB() where id = ? 但我不能这样做,我不能在 SQL 中硬编码“E
我们正在尝试在 CLOB 字段中应用子字符串函数来修剪前 4000 个字符。我们收到以下错误消息。 下面是我们正在使用的查询: select cast(substr(field_name,1,4000
如何将 Clob 数据转换为 Binarystream ? 到目前为止,我可以通过 2 个步骤找到它,1--> CLOB 到字符串 2---> 字符串到 BinaryStream。 我正在调用一个具有
我有一个超过 5000 个字符的字符串,我想用 MyBatis 将其保存为 XMLTYPE。为此,我执行以下操作: 将字符串转换为 CLOB,CLOB 使用它通过构造函数将其保存在数据库中:XMLTY
当我尝试在 CLOB 列上使用 LAG 函数时遇到问题。 假设我们有一张 table create table test ( id number primary key, not_cl
我有一个具有以下 NLS 设置的数据库 NLS_NCHAR_CHARACTERSET - AL16UTF16 NLS_CHARACTERSET - AL32UTF8 有一个带有 clob 列的表,其
我在一个包含大量 XML 数据的表中有一个 CLOB 列。我需要为表格的一行更新此列的值。我该怎么做? 我试过谷歌搜索,但这种明显简单的东西在任何地方都无法以简单的语言提供。有人可以建议吗? 如果我使
我想知道 Oracle 的 CLOB 必须通过 BLOB 数据类型提供什么。 Both数据存储限制为 (4 GB - 1) * DB_BLOCK_SIZE。 长度超过 4000 字节的文本字符串不能放
我是一名优秀的程序员,十分优秀!