日期:2014-05-16  浏览次数:20462 次

Oracle系列之三----Implicit Cursor

Oracle系列之一----Datatype And Subprogram:http://overshit.iteye.com/admin/blogs/932585;
Oracle系列之二----Exception And Expression:http://overshit.iteye.com/admin/blogs/932605;
Oracle系列之三----Implicit Cursor:http://overshit.iteye.com/admin/blogs/932609;
Oracle系列之四----Dynamic Cursor:http://overshit.iteye.com/admin/blogs/932610;
Oracle系列之五----Cursor And Variable:http://overshit.iteye.com/admin/blogs/932612;
Oracle系列之六----Procedure--Package--Purity:http://overshit.iteye.com/admin/blogs/932615;
Oracle系列之七----Trigger:http://overshit.iteye.com/admin/blogs/932616;

?

?

----implicit cursor:sql%notfound returning
----sql%isopen
/*Attribute:sql%found:a value of boolean,if influence records in db,it returns true,or return false;
            sql%notfound:against sql%found;
            sql%rowcount:how many records are influenced(return an integer);
            sql%isopen:a value of boolean,if cursor is open,return true,or return fase,implicit cursor always return fasle;
  Method:returning: lay back result of sql expression operation,reduce access db query operation,upgrade db performance;
*/

drop table temp;
create table temp(
  tid varchar2(10),
  tname varchar2(20)
)
insert into temp values ('1','meilin');
insert into temp values ('2','bing');
insert into temp values ('3','qing');
declare
v_temp temp%rowtype;
begin
  update temp set tname = 'syntax' where tid = 1 returning tid,tname into v_temp;
  if sql%notfound then
    dbms_output.put_line('Update Failure: ' || sql%rowcount);
  else
    dbms_output.put_line('Update Success: ' || sql%rowcount || ' ' || v_temp.tname);
    if sql%isopen then
      dbms_output.put_line('The cursor is open!');
    else
      dbms_output.put_line('The cursor is close!');
    end if;
  end if;
end;
select * from temp;

----implicit cursor:bulk collect
delete from temp;
insert into temp values ('1','meilin');
insert into temp values ('2','bing');
insert into temp values ('3','qing');
declare
type temp_type is table of temp%rowtype index by binary_integer;
v_temp temp_type;
begin
  select * bulk collect into v_temp from temp;
  for i in 1.. v_temp.count
    loop
      dbms_output.put_line('tname:' || v_temp(i).tname);
    end loop;
end;

----forall:reduce transfer data times between PL/SQL ?engine and SQL ?engine,upgrade db performance;
drop table param;
create table param(
  pname varchar2(20)
)
declare
type temp_tname_type is table of temp.tname%type index by binary_integer;
v_tname temp_tname_type;
begin
  select custname  bulk collect into v_tname from customer where custid = '96';
  forall i in 1..v_tname.count
    insert into param values (v_tname(i));
  dbms_output.put_line(sql%bulk_rowcount(1) || '--' || v_tname(1));
  commit;
  ----rollback;
end;
select * from param;

----transaction
delete from param;
begin
  ----transaction start
  insert into param values ('Java');
  savepoint spj;
  insert into param values ('Python');
  savepoint spp;
  insert into param values ('Dotnet');
  savepoint spd;
  rollback to savepoint spj;
  commit;
  exception
    when others then
      rollback;
end;
select * from param;

----lock
update temp set tname = 'lock' where tid = '1';

----transaction isolation(to be continued)

?

Oracle系列SQL及数据库下载:http://download.csdn.net/source/3046868

?

?

?

?

?

?

?