我们已将.database从oracle 8迁移到oracle 11g
在update语句之后的一个过程中有一个if条件,它检查是否有任何行受到影响。 如果是,则它将不执行任何操作,否则它会将数据插入表
IF (SQL%NOTFOUND) THEN
-- The record does not exist so try to insert the master customer data.
insert_order_master_customer(p_host_country_id,
p_order_id, p_accting_year,
p_master_cust_id,
p_master_cust_name );
END IF;
但是这个条件在成功更新后无法正常工作,它正在评估为真,如果是阻止,则控制进入内部。
答案 0 :(得分:1)
不会在11.2.0.2上重现。
SQL> create table foo(id number);
Table created.
SQL> insert into foo values (1);
1 row created.
SQL> set serverout on
SQL> begin
2 update foo set id = 2 where id = 1;
3 IF (SQL%NOTFOUND) THEN
4 dbms_output.put_line('not found!');
5 elsif (SQL%NOTFOUND = false)
6 then
7 dbms_output.put_line('found!');
8 end if;
9 end;
10 /
found!
是检查前的更新,即它之间没有别的东西吗?如果你在IF检查之前放dbms_output.put_line(sql%rowcount);
那么输出是什么?
答案 1 :(得分:0)
exception when DATA_NOT_FOUND then
insert_order_master_customer(p_host_country_id,
p_order_id, p_accting_year,
p_master_cust_id,
p_master_cust_name );
答案 2 :(得分:0)
使用SQL%ROWCOUNT计算受影响的行数。 %NOTFOUND仅适用于Open-Fetch游标。 SQL%NOTFOUND在WHEN NO_DATA_FOUND异常中为TRUE。
是,NO_DATA_FOUND,不是DATA_NOT_FOUND