post_change这个trigger在什么环境下使用?

[复制链接]
查看11 | 回复9 | 2011-11-1 16:24:51 | 显示全部楼层 |阅读模式
1,大家好,请问post_change这个trigger一般在哪种情况下会用到呢?
2,我现在有个环境是,query出一个基于DB的资料,然后做修改,修改保存之后,希望将这次修改的时间更新到table的一个字段中,于是我建了一个block级的post_change触发器,内容如下:
begin
update sha_tax_invoice_registry
setupdated_on = sysdate,
updated_by = :main.user
wheretax_invoice_no = :sha_tax_invoice_registry.tax_invoice_no;
commit;
end;
但运行时,发现在我每次更改item信息时都会弹出一个错误对话框
FRM-40737:Illegal restricted procedure COMMIT in POST-CHANGE trigger.
请高手指点。。。是否post_query中不允许添加commit?

回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
trigger 当中不能加 commit.
要加的话,用自治事务 PRAGMA AUTONOMOUS_TRANSACTION
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
solomon_007 发表于 2011-9-19 14:06
trigger 当中不能加 commit.
要加的话,用自治事务 PRAGMA AUTONOMOUS_TRANSACTION


PRAGMA AUTONOMOUS_TRANSACTION 这个怎么添加额?不好意思,我是入门级别
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
要加加在定义部分;但你的这个最好不要加,因为与主事务一起,要么都提交要么都回退
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
Forms_ddl('commit')
这个只提交SQL语句, 不提交Form界面的修改。
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
solomon_007 发表于 2011-9-19 14:06
trigger 当中不能加 commit.
要加的话,用自治事务 PRAGMA AUTONOMOUS_TRANSACTION

请问下,
1. 有一个form,是列表展现形式的;
假设有 column A , B , C
现在想将 B, C 根据 A 的值来设置是否必须输入
在 A 的item 级触发器 post-change 应用:
if A = 'X' then
set_item_instance_property('block.B',current_record, required, property_true);
else
.......property_false);
end if;
结果是,当A 改变成 X 时,B, C 是变黄的,但是不输入值却可以保存;
而设想是变黄必须输入,如果不输入不能保存。
这是怎么回事?还是得在别的trigger 也写上?
2. post-change 有的人说这个trigger 已被抛弃不用了?
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
这种业务逻辑可以直接放到key_commit里去验证,
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
本帖最后由 doni 于 2016-6-24 10:41 编辑
workflow263 发表于 2016-6-24 08:19
这种业务逻辑可以直接放到key_commit里去验证,

提交的业务逻辑检查放在key-commit是不完全安全的,放在pre-commit中才是能保证安全。
因为,key-exeqry,key-entqry,key-exit,key-clear等触发的commit,或者其他trigger和procedure中的commit或commit_form都可能绕过key-commit
key-commit中建议做用户确认的动作

回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
【风云】 发表于 2016-6-24 00:27
请问下,
1. 有一个form,是列表展现形式的;
假设有 column A , B , C

关于“2. post-change 有的人说这个trigger 已被抛弃不用了?”
可以看一下这两个trigger的说明
on-validate-field
An On-Validate-Field trigger fires during the Validate the Field event.
Trigger Specifically, it fires as the last part of field validation for fields with the
New or Changed validation status.
post-change
A Post-Change trigger fires when any of the following conditions occur:
the Validate the Field event determines that a field is marked
as Changed and is non-NULL
an operator reads a value into a field from a list of values
SQL*Forms reads a value into a field from a fetched record
两者还是有区别的,on-validate-field可用的场合更多,多数情况下可以取代post-change
所以,我的习惯一般是这样的:
1. base_table的block,query后,base_table字段影响非base_table字段的相关动作用post-query
2. 非base_table的block,fetch后,fetch的字段影响非fetch字段的相关动作用post-change
3. 用户修改字段影响相关字段的用on-validate-field
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
doni 发表于 2016-6-24 10:52
关于“2. post-change 有的人说这个trigger 已被抛弃不用了?”
可以看一下这两个trigger的说明
on-val ...


多谢
还是得做下测试才能理解透了。。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行