问题描述
我们将某些流程的查询存储在Oracle表的varchar2字段中。迄今为止,这些查询总是 <4000个字符。最近,我们有机会存储大于4000个字符的查询。这会导致问题,因为我们的数据库虽然是12c,但不支持扩展的varchar2字段。
我的策略是创建一个包含如下代码的插入/更新触发器:
其中queryClob是CLOB字段,queryString是varchar2字段。
只要queryString <4000个字符,它就可以工作。如果queryString> 4000个字符,则Oracle会抛出异常,触发器不会执行。无论如何都可以执行触发器吗?
谢谢。
我的策略是创建一个包含如下代码的插入/更新触发器:
:new.queryClob = :new.queryString; :new.queryString := '';
其中queryClob是CLOB字段,queryString是varchar2字段。
只要queryString <4000个字符,它就可以工作。如果queryString> 4000个字符,则Oracle会抛出异常,触发器不会执行。无论如何都可以执行触发器吗?
谢谢。
专家解答
不幸的是,没有,因为为了能够引用 “: new.queryString”,我们需要能够将传入的数据存储在该字段中... 当然,它不适合。
你有什么理由不能这么说 “咬紧牙关”,把 “查询” 改成clob?
另一种选择是在代码周围有一个包装器,人们调用一个例程 (也许是plsql) 来添加一行,然后在那里进行翻译。
但是我只会转换为clob,或者看看使用max_string_size = extended。
你有什么理由不能这么说 “咬紧牙关”,把 “查询” 改成clob?
另一种选择是在代码周围有一个包装器,人们调用一个例程 (也许是plsql) 来添加一行,然后在那里进行翻译。
但是我只会转换为clob,或者看看使用max_string_size = extended。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




