Oracle 11g sql%未发现问题
我们已将.database从oracle 8迁移到oracle 11g 在其中一个过程after update语句中,有一个if条件,用于检查是否有任何行受到影响。 如果是,那么它将什么也不做,否则它将向表中插入数据Oracle 11g sql%未发现问题,oracle,oracle11g,Oracle,Oracle11g,我们已将.database从oracle 8迁移到oracle 11g 在其中一个过程after update语句中,有一个if条件,用于检查是否有任何行受到影响。 如果是,那么它将什么也不做,否则它将向表中插入数据 IF (SQL%NOTFOUND) THEN -- The record does not exist so try to insert the master customer data. insert_order_master_customer(p
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;
但在成功更新后,此条件不起作用。它正在评估true,控件将进入if块。在11.2.0.2上不会在此处重现
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 );
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!
更新就在检查之前吗?另外,如果将dbms\u output.put\u行(sql%rowcount)放入,则输出是什么代码>就在IF检查之前
使用SQL%ROWCOUNT计算受影响的行数。%NOTFOUND仅适用于Open Fetch游标。当未发现异常数据时,SQL%NOTFOUND将在内部为TRUE
它是,找不到数据,找不到数据
SQL%notfound是否存在任何问题?它在oracle 8中工作正常是的,我们有一个更新语句。在我们提交之后,检查是否(SQL%NOTFOUND),然后插入命令end IF。在oracle 8中,它完全可以正常工作,即在更新后,它不在if条件内,但在迁移到11g后,即使在成功更新后,它也不工作。是的update语句就在检查之前。更新后,我们已编写提交;在这之后,dbms_output.put_行(sql%rowcount);是给零行。但是如果我写dbms_output.put_行(sql%rowcount);在提交之前,它给出了1行。@这就是为什么我说是在检查之前更新的原因。使用COMMIT代码>在更新和sql%检查之间,我希望它为rowcount返回0,为notfound返回true。在执行任何其他sql之前,必须检查sql,包括commit代码>当我独立执行时,更新sql是可以的,它的执行是正确的。您能告诉我在成功更新时,sql%retun number of Row updated of alwayz 0吗?@aru sql%rowcount将返回更新的行数。只有在完成提交或其他SQL操作之前捕获该值,它才会返回正确的值。@aru ie.doupdate x set a=。。。其中代码>然后在任何提交之后、之前,比如v_rows:=sql%rowcount
然后您就有了结果,可以提交或其他任何内容,然后您可以检查如果(v_rows>0),然后..
(同样适用于sql%notfound
,只需保存到布尔变量)