sql%notfound、sql%rowcount和return

shiyihai發表於2007-11-26

今天一部門開發人員透過公司BQQ問我是否可以在指令碼中獲取到update語句執行後的更新行數,並想知道返回值。
我做了一個小試驗,如下的內容很適合他藉以利用。這個案例的關鍵字有sql%notfound、sql%rowcount和return,適合在指令碼或應用中加以使用。

[@more@]

SQL> create table test_return
2 (
3 name varchar2(24)
4 );

Table created

SQL> insert into test_return values('111');

1 row inserted

SQL> insert into test_return values('222');

1 row inserted

SQL> commit;

Commit complete

SQL>
SQL> set serveroutput on
--用SQL %NOTFOUND來獲取是否更新了行數,true/false
SQL> begin
2 update test_return set name=name where name='123';
3 if SQL %NOTFOUND then
4 dbms_output.put_line('沒有資料行更新。');
5 end if;
6 end;
7 /

沒有資料行更新。

PL/SQL procedure successfully completed

SQL>
SQL> set serveroutput on
SQL> begin
2 update test_return set name=name where name='111';
3 if SQL %NOTFOUND then
4 dbms_output.put_line('沒有資料行更新。');
5 end if;
6 end;
7 /

PL/SQL procedure successfully completed

SQL> commit;

Commit complete

SQL>
--用sql%rowcount來獲取更新的行數
SQL> begin
2 update test_return set name=name;
3 dbms_output.put_line('已經更新的行數為:'||to_char(sql%rowcount));
4 end;
5 /

已經更新的行數為:2

PL/SQL procedure successfully completed

SQL> commit;

Commit complete

--如下兩個例子獲取更新後或插入後的列值
SQL>
SQL> declare
2 v_name varchar2(24);
3 begin
4 update test_return set name=name where rownum<2 returning name into v_name;
5 dbms_output.put_line('已經更新的name為:'||v_name);
6 end;
7 /

已經更新的name為:111

PL/SQL procedure successfully completed

SQL>
SQL> declare
2 v_name varchar2(24);
3 begin
4 insert into test_return(name) values('333') returning name into v_name;
5 dbms_output.put_line('已經更新的name為:'||v_name);
6 end;
7 /

已經更新的name為:333

PL/SQL procedure successfully completed

SQL> commit;

Commit complete

SQL>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/38542/viewspace-984943/,如需轉載,請註明出處,否則將追究法律責任。

相關文章