当 :system_mode = 'query' 时为空
When :system_mode = 'query' then null
我正在创建触发器以在 oracle forms 11g 中获取最大发票#,它运行良好。
但我需要 :system.mode in ('execute','query')
时触发将不起作用。
我正在尝试
if :system.mode ='execute' then
null;
else
SELECT NVL(MAX(INV),0)+1 INTO :SA.INV FROM ALFA.SA WHERE MM_YY = :MM_YY;
end if;
但是触发器在两种模式下都给出最大发票#。我只需要正常或插入模式。
我也试试
if :system.mode ='query' then
null;
但不工作。触发给发票#的最大值。
SYSTEM.MODE
有 3 个有效值:
- 正常
- 输入查询
- 查询
全部大写。没有EXECUTE
.
而且,你的做法是错误的。只要它在单用户环境中工作,它就会在多用户环境中失败,因为迟早会有两个(或更多)用户从 table 中获取相同的 MAX(INV)
使 :SA.INV
重复 。如果它是主键或唯一键,您甚至无法将其存储到 table(第一个提交的用户除外)。
有一种方法可以做到这一点(使用包含下一个有效值的 table,由自主事务函数获取),但是 - 我建议您切换到 sequence 或 - 如果您的数据库版本支持它 - identity 列。
我正在创建触发器以在 oracle forms 11g 中获取最大发票#,它运行良好。
但我需要 :system.mode in ('execute','query')
时触发将不起作用。
我正在尝试
if :system.mode ='execute' then
null;
else
SELECT NVL(MAX(INV),0)+1 INTO :SA.INV FROM ALFA.SA WHERE MM_YY = :MM_YY;
end if;
但是触发器在两种模式下都给出最大发票#。我只需要正常或插入模式。
我也试试
if :system.mode ='query' then
null;
但不工作。触发给发票#的最大值。
SYSTEM.MODE
有 3 个有效值:
- 正常
- 输入查询
- 查询
全部大写。没有EXECUTE
.
而且,你的做法是错误的。只要它在单用户环境中工作,它就会在多用户环境中失败,因为迟早会有两个(或更多)用户从 table 中获取相同的 MAX(INV)
使 :SA.INV
重复 。如果它是主键或唯一键,您甚至无法将其存储到 table(第一个提交的用户除外)。
有一种方法可以做到这一点(使用包含下一个有效值的 table,由自主事务函数获取),但是 - 我建议您切换到 sequence 或 - 如果您的数据库版本支持它 - identity 列。