oracle的行属性,按名称获取Oracle pl/sql变量属性(pl/sql中的反射)

也许有必要弄清楚为什么有“不触发”规则。

对于触发器有很多很好的论据,尤其是关于将业务规则放入触发器的论据,但是日志记录对于它们的使用来说是一个很好的例子。

还值得一看Oracle的内置表版本控制(每次更新都会记录一行),这使历史记录的形状与当前表的形状保持一致。

它不会给你“什么改变了”的历史,但是当你看历史的时候,最好做“什么改变了”,而不是在每次更新上增加成本。

我找到的唯一方法就是动态访问%rowtype的属性,将变量放在包头上(这样它是公开的),然后执行动态pl/sql。只要动态PL/SQL块在每次检查之前包含本地副本,就可以封装行变量。也就是说,把它想象成您的立即执行模板。

DECLARE

lNew myTab%ROWTYPE;

lOld myTab%ROWTYPE;

lReturn PLS_INTEGER := 0;

BEGIN

lNew := pStatefulPackage.NewRow;

lOld := pStatefulPackage.OldRow;

IF NVL(lNew.,'~') != NVL(lOld..,'~') THEN

:lReturn := 1;

END IF;

END;

在动态SQL中,无法绑定记录变量或布尔值这一事实是很麻烦的。

它还增加了很多按列计算的开销。

最后,我发现对于这类事情来说,所有的列都太慢了——您需要将元数据缓存在本地PL/SQL内存中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值