暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

是否可以在Oracle的数据验证之前执行触发器?

ASKTOM 2020-06-19
338

问题描述

我们将某些流程的查询存储在Oracle表的varchar2字段中。迄今为止,这些查询总是 <4000个字符。最近,我们有机会存储大于4000个字符的查询。这会导致问题,因为我们的数据库虽然是12c,但不支持扩展的varchar2字段。

我的策略是创建一个包含如下代码的插入/更新触发器:

   :new.queryClob = :new.queryString;
   :new.queryString := '';


其中queryClob是CLOB字段,queryString是varchar2字段。

只要queryString <4000个字符,它就可以工作。如果queryString> 4000个字符,则Oracle会抛出异常,触发器不会执行。无论如何都可以执行触发器吗?

谢谢。

专家解答

不幸的是,没有,因为为了能够引用 “: new.queryString”,我们需要能够将传入的数据存储在该字段中... 当然,它不适合。

你有什么理由不能这么说 “咬紧牙关”,把 “查询” 改成clob?

另一种选择是在代码周围有一个包装器,人们调用一个例程 (也许是plsql) 来添加一行,然后在那里进行翻译。

但是我只会转换为clob,或者看看使用max_string_size = extended。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论