一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Oracle筆記 九、PL/SQL 游標(biāo)的使用

 集微筆記 2013-07-29
--演示隱式游標(biāo),系統(tǒng)自動(dòng)聲明,自動(dòng)打開(kāi),自動(dòng)使用并且自動(dòng)關(guān)閉
begin
     update emp set sal = 1000;
     dbms_output.put_line('影響的行數(shù):' || sql%rowcount);
end;
 
rollback;
 
/*游標(biāo)的使用方法:
第一步:聲明游標(biāo)
第二步:打開(kāi)游標(biāo)
第三步:使用游標(biāo)進(jìn)行循環(huán)操作
第四步:關(guān)閉游標(biāo)*/
 
--普通游標(biāo),游標(biāo)本身就是一個(gè)變量
declare     
     --下面的這行代碼聲明了一個(gè)游標(biāo)
     cursor mycur is select * from emp where deptno = 20;
     emprow emp%rowtype;
begin
     open mycur; --打開(kāi)游標(biāo)
     loop
         fetch mycur into emprow; --把游標(biāo)所指的紀(jì)錄放到變量中
         exit  when (mycur%notfound); --當(dāng)游標(biāo)沒(méi)有指向行時(shí)退出循環(huán)
         dbms_output.put_line('名字:' || emprow.ename || '薪水:' || emprow.sal);
     end loop;
     close mycur;  --關(guān)閉游標(biāo)
end;
 
--簡(jiǎn)單游標(biāo),列操作
declare
       empname emp.ename%type;
       empsal emp.sal%type;
       cursor mycur is select ename,sal from emp where deptno = 30;
begin
     open mycur;
     loop
         fetch mycur into empname,empsal;
         exit when mycur%notfound;
         dbms_output.put_line('姓名:' || empname || '工資' || empsal);
     end loop;
end;
 
--簡(jiǎn)單游標(biāo),列操作
declare
  cursor c 
  is
  select * from dept;
  vDept_row_record c%rowtype;
begin
  open c;
  fetch c into vDept_row_record;
  dbms_output.put_line(vDept_row_record.dname);
  close c;
end;
 
--when循環(huán)游標(biāo)
declare
  cursor c 
  is
  select * from dept;
  vDept_row_record c%rowtype;
begin
  open c;
  loop
       fetch c into vDept_row_record;
       exit when(c%notfound);
       dbms_output.put_line(vDept_row_record.dname);
  end loop;
  close c;
end;
 
--while循環(huán)游標(biāo)
declare
  cursor c
  is
  select * from dept;
  vDept_row_record c%rowtype;
begin
  open c;
  fetch c into vDept_row_record;
  while (c%found) loop
    dbms_output.put_line(vDept_row_record.dname);
    fetch c into vDept_row_record;
  end loop;
  close c;
end;
 
--for循環(huán)游標(biāo)
declare
  cursor c
  is
  select * from dept;
  vDept_row_record c%rowtype;
begin
  for vDept_row_record in c loop
    dbms_output.put_line(vDept_row_record.dname);
  end loop;
end;
 
--帶參游標(biāo)
declare
  cursor c(sSal emp.sal%type, sEmpno emp.empno%type)
  is
  select * from emp where sal >= sSal and empno > sEmpno;
begin
  for record_data in c(2500, 6666) loop
      dbms_output.put_line(record_data.ename);
  end loop;
end;
 
--update游標(biāo)
declare
  cursor c(sSal emp2.sal%type)
  is
  select * from emp2 where sal >= sSal for update;
begin
  for record_data in c(2500) loop
    if (record_data.sal < 3000) then
      update emp2 set sal = sal   3 where current of c;
      dbms_output.put_line(record_data.ename);
    elsif (record_data.sal = 5000) then
      update emp2 set sal = sal - 3 where current of c;
      dbms_output.put_line(record_data.ename);
    end if;
  end loop;
end;
 
--引用游標(biāo)不能使用循環(huán)游標(biāo)的語(yǔ)法
--引用游標(biāo)不能進(jìn)行刪除和修改
--引用游標(biāo)是一個(gè)數(shù)據(jù)類型,使用該類型必須聲明變量
 
--弱類型引用游標(biāo),就是不指定游標(biāo)將要提取的數(shù)據(jù)行的類型
declare
       type my_cur_type is ref cursor;
       mycur my_cur_type;--聲明變量
       which varchar2(10);
       deptrow dept%rowtype;
       emprow emp%rowtype;
begin
     which := '&請(qǐng)選擇dept還是emp';
     if (which = 'dept') then
        open mycur for select * from dept;
        loop
            fetch mycur into deptrow;
            exit when (mycur%notfound);
            dbms_output.put_line(deptrow.deptno || '  ' || deptrow.dname);
        end loop;
     elsif (which = 'emp') then
        open mycur for select * from emp;
        loop
            fetch mycur into emprow;
            exit when (mycur%notfound);
            dbms_output.put_line(emprow.empno || '  ' || emprow.ename);
        end loop;
     end if;
     close mycur;
end;
 
--強(qiáng)類型引用游標(biāo),就是指定游標(biāo)將要提取的數(shù)據(jù)行的類型 ,只能是record或%rowtype類型
--比如:return number是錯(cuò)的,return emp.ename%type也是錯(cuò)的
declare
       type mycurtype is ref cursor return emp%rowtype;
       mycur mycurtype;--聲明變量
       emprow emp%rowtype;
begin
        open mycur for select * from emp;
        loop
            fetch mycur into emprow;
            exit when mycur%notfound;
            dbms_output.put_line(emprow.empno || '  ' || emprow.ename);
        end loop;
        close mycur;
出處:http://www.cnblogs.com/hoojo/archive/2011/05/03/2035357.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲国产一区精品一区二区三区色| 国产又粗又长又大高潮视频| 老司机精品视频免费入口| 九九热最新视频免费观看| 国产精品一区二区视频大全| 成人精品一区二区三区综合| 成人综合网视频在线观看| 国产精品免费不卡视频| 国产成人午夜在线视频| 亚洲欧洲日韩综合二区| 欧美成人精品一区二区久久| 亚洲一区二区精品免费| 国产情侣激情在线对白| 精品人妻一区二区三区免费| 国产成人精品99在线观看| 九九九热视频免费观看| 亚洲熟女国产熟女二区三区| 欧美日韩亚洲巨色人妻| 久久亚洲成熟女人毛片| 熟女免费视频一区二区| 国产又粗又长又爽又猛的视频| 亚洲欧洲在线一区二区三区| 欧美日韩在线视频一区| 欧美日韩欧美国产另类| 日韩夫妻午夜性生活视频| 日韩欧美三级视频在线| 国产老熟女乱子人伦视频| 欧美美女视频在线免费看| 精品久久久一区二区三| 日韩欧美高清国内精品| 国产精品久久女同磨豆腐| 蜜桃av人妻精品一区二区三区| 日韩精品一区二区三区av在线| 青青操精品视频在线观看| 国产原创中文av在线播放| 有坂深雪中文字幕亚洲中文| 亚洲中文字幕亲近伦片| 久久国产精品亚州精品毛片| 风间中文字幕亚洲一区| 日本深夜福利在线播放| 六月丁香六月综合缴情|