0

我们已将 .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;

但是这种情况在成功更新后不起作用,它正在评估 true 并且控制在 if 块内部。

4

3 回答 3

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!

是在检查之前更新,即它之间没有其他东西吗?dbms_output.put_line(sql%rowcount);如果您在 IF 检查之前放置,还有什么输出?

于 2012-12-19T11:34:14.093 回答
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     );
于 2012-12-19T11:27:05.993 回答
0
  1. 使用 SQL%ROWCOUNT 计算受影响的行数。%NOTFOUND 仅适用于 Open-Fetch 游标。SQL%NOTFOUND 在 WHEN NO_DATA_FOUND 异常中为 TRUE。

  2. 它是 NO_DATA_FOUND,而不是 DATA_NOT_FOUND

于 2015-07-06T13:59:20.580 回答