<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    superwei

    導(dǎo)航

    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統(tǒng)計(jì)

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    oracle cursor 游標(biāo)(轉(zhuǎn)載)

    ?

    游標(biāo)

    用來查詢數(shù)據(jù)庫,獲取記錄集合(結(jié)果集)的指針,可以讓開發(fā)者一次訪問一行結(jié)果集,在每條結(jié)果集上作操作。


    分類

    靜態(tài)游標(biāo):
    分為顯式游標(biāo)和隱式游標(biāo)。

    REF游標(biāo):
    是一種引用類型,類似于指針。

    ?

    顯式游標(biāo)

    ?CURSOR?游標(biāo)名?(?參數(shù)?)?[返回值類型]?IS
    ??Select?語句


    生命周期:

    1.打開游標(biāo)(OPEN)
    解析,綁定。。。不會從數(shù)據(jù)庫檢索數(shù)據(jù)

    2.從游標(biāo)中獲取記錄(FETCH?INTO)
    執(zhí)行查詢,返回結(jié)果集。通常定義局域變量作為從游標(biāo)獲取數(shù)據(jù)的緩沖區(qū)。

    3.關(guān)閉游標(biāo)(CLOSE)
    完成游標(biāo)處理,用戶不能從游標(biāo)中獲取行。還可以重新打開。


    選項(xiàng):參數(shù)和返回類型


    set?serveroutput?on
    declare
    ?cursor?emp_cur?(?p_deptid?in?number)?is?
    select?*?from?employees?where?department_id?=?p_deptid;

    l_emp?employees%rowtype;
    begin
    ?dbms_output.put_line('Getting?employees?from?department?30');
    open?emp_cur(30);
    ?loop
    ??fetch?emp_cur?into?l_emp;
    ??exit?when?emp_cur%notfound;
    ??dbms_output.put_line('Employee?id?'||?l_emp.employee_id?||?'?is?');
    ??dbms_output.put_line(l_emp.first_name?||?'?'?||?l_emp.last_name);
    ?end?loop;
    ?close?emp_cur;

    ?dbms_output.put_line('Getting?employees?from?department?90');
    open?emp_cur(90);
    ?loop
    ??fetch?emp_cur?into?l_emp;
    ??exit?when?emp_cur%notfound;
    ??dbms_output.put_line('Employee?id?'||?l_emp.employee_id?||?'?is?');
    ??dbms_output.put_line(l_emp.first_name?||?'?'?||?l_emp.last_name);
    ?end?loop;
    ?close?emp_cur;
    end;
    /

    ?

    隱式游標(biāo)

    不用明確建立游標(biāo)變量,分兩種:
    1.在PL/SQL中使用DML語言,使用ORACLE提供的名為SQL的隱示游標(biāo)
    2.CURSOR?FOR?LOOP,用于for?loop?語句


    1舉例:

    declare
    begin
    ?update?departments?set?department_name=department_name;
    ?--where?1=2;
    ?
    ?dbms_output.put_line('update?'||?sql%rowcount?||'?records');
    end;
    /


    2舉例:

    declare
    begin
    ?for?my_dept_rec?in?(?select?department_name,?department_id?from?departments)
    ?loop
    ??dbms_output.put_line(my_dept_rec.department_id?||?'?:?'?||?my_dept_rec.department_name);
    ?end?loop;
    end;
    /


    3舉例:

    單獨(dú)select?

    declare
    ?l_empno?emp.EMPLOYEE_ID%type;
    --?l_ename?emp.ename%type;
    begin
    ?select?EMPLOYEE_ID????
    ??into?l_empno
    ?from?emp;
    ?--where?rownum?=1;
    ?dbms_output.put_line(l_empno);
    end;
    /
    使用INTO獲取值,只能返回一行。

    ?

    游標(biāo)屬性

    %FOUND:變量最后從游標(biāo)中獲取記錄的時(shí)候,在結(jié)果集中找到了記錄。
    %NOTFOUND:變量最后從游標(biāo)中獲取記錄的時(shí)候,在結(jié)果集中沒有找到記錄。
    %ROWCOUNT:當(dāng)前時(shí)刻已經(jīng)從游標(biāo)中獲取的記錄數(shù)量。
    %ISOPEN:是否打開。


    Declare
    ?Cursor?emps?is
    ?Select?*?from?employees?where?rownum<6?order?by?1;
    ?
    ?Emp?employees%rowtype;
    ?Row?number?:=1;
    Begin
    ?Open?emps;
    ?Fetch?emps?into?emp;
    ?
    ?Loop
    ??If?emps%found?then
    ???Dbms_output.put_line('Looping?over?record?'||row||?'?of?'?||?emps%rowcount);
    ???Fetch?emps?into?emp;
    ???Row?:=?row?+?1;
    ??Elsif?emps%notfound?then
    ???Exit;??---exit?loop,?not?IF
    ??End?if;
    ?End?loop;
    ?
    ?If?emps%isopen?then
    ??Close?emps;
    ?End?if;
    End;
    /

    ?

    顯式和隱式游標(biāo)的區(qū)別

    盡量使用隱式游標(biāo),避免編寫附加的游標(biāo)控制代碼(聲明,打開,獲取,關(guān)閉),也不需要聲明變量來保存從游標(biāo)中獲取的數(shù)據(jù)。

    ?

    REF?CURSOR游標(biāo)

    動態(tài)游標(biāo),在運(yùn)行的時(shí)候才能確定游標(biāo)使用的查詢。分類:
    強(qiáng)類型(限制)REF?CURSOR,規(guī)定返回類型?
    弱類型(非限制)REF?CURSOR,不規(guī)定返回類型,可以獲取任何結(jié)果集。


    TYPE?ref_cursor_name?IS?REF?CURSOR?[RETURN?return_type]


    Declare
    ?Type?refcur_t?is?ref?cursor;
    ?
    ?Type?emp_refcur_t?is?ref?cursor?return?employee%rowtype;
    Begin
    ?Null;
    End;
    /


    強(qiáng)類型舉例:

    declare
    ?--聲明記錄類型
    ?type?emp_job_rec?is?record(
    ??employee_id?number,
    ??employee_name?varchar2(50),
    ??job_title?varchar2(30)
    ?);
    ?--聲明REF?CURSOR,返回值為該記錄類型
    ?type?emp_job_refcur_type?is?ref?cursor
    ??return?emp_job_rec;
    ?--定義REF?CURSOR游標(biāo)的變量
    ?emp_refcur?emp_job_refcur_type;

    ?emp_job?emp_job_rec;
    begin
    ?open?emp_refcur?for
    ??select?e.employee_id,
    ????e.first_name?||?'?'?||e.last_name?"employee_name",
    ????j.job_title
    ??from?employees?e,?jobs?j
    ??where?e.job_id?=?j.job_id?and?rownum?<?11?order?by?1;

    ?fetch?emp_refcur?into?emp_job;
    ?while?emp_refcur%found?loop
    ??dbms_output.put_line(emp_job.employee_name?||?'''s?job?is?');
    ??dbms_output.put_line(emp_job.job_title);
    ??fetch?emp_refcur?into?emp_job;
    ?end?loop;
    end;

    posted on 2007-02-08 17:19 小辭猬 閱讀(350) 評論(0)  編輯  收藏 所屬分類: DataBase

    主站蜘蛛池模板: 全部免费毛片免费播放| 91精品免费不卡在线观看| 成人在线免费观看| 亚洲国产成人精品无码区在线秒播| 三级网站免费观看| 亚洲成a人片在线观看无码| 国产一级一毛免费黄片| 久久精品熟女亚洲av麻豆| 精品久久久久久无码免费| 亚洲欧洲中文日韩久久AV乱码| 免费精品国产自产拍在线观看| va亚洲va日韩不卡在线观看| fc2免费人成为视频| 成人毛片18女人毛片免费| 自拍偷区亚洲国内自拍| 国产一区二区视频免费| 四虎国产精品永免费| 亚洲国产精品VA在线观看麻豆 | 91免费国产视频| 亚洲AV无码成人精品区在线观看 | 久久久免费精品re6| 亚洲国产精品人人做人人爱| 特级毛片A级毛片100免费播放 | 亚洲欧洲日产国码www| 成人五级毛片免费播放| 丰满妇女做a级毛片免费观看| 亚洲中文字幕无码中文字在线| 久久免费观看国产精品| 亚洲中文字幕无码av永久| 无码国产亚洲日韩国精品视频一区二区三区| 一区在线免费观看| 亚洲酒色1314狠狠做| 四虎影库久免费视频| 免费的全黄一级录像带| 国产精品亚洲αv天堂无码| 久久国产乱子伦精品免费不卡| 亚洲国产精品综合久久20| 亚洲欧洲中文日韩久久AV乱码| 久久亚洲免费视频| 亚洲AV无码专区在线厂| 久久亚洲国产精品一区二区|