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

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

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

    blogjava's web log

    blogjava's web log
    ...

    oracle游標備忘

    -- 例六:%NotFound

    BEGIN
    ??
    DELETE ? FROM ?Rs_Employees
    ????
    Where ?HeTongId = ' WL-090001 ' ;
    ??
    ??
    if ?sql % Notfound? then
    ????Dbms_Output.put_line(
    ' 沒有找到要刪除的記錄 ' );
    ??
    else
    ????Dbms_Output.put_line(
    ' 已刪除記錄 ' );
    ??
    end ? if ;

    END ;
    ???
    ???
    ???
    -- 例七:%RowCount,查詢記錄行數
    Declare
    ??v_name?Rs_Employees.Name
    % type;
    BEGIN
    ??
    SELECT ?Name? Into ?v_Name
    ????
    FROM ?Rs_Employees
    ????
    Where ?HeTongId = ' WL-090010 ' ;
    ??
    ??
    if ?sql % RowCount ? > 0 ? Then
    ????Dbms_Output.put_line(
    ' 已從表中選擇行,Name為: ' || v_Name);
    ??
    else
    ????Dbms_Output.put_line(
    ' 從表中未選擇行 ' );
    ??
    end ? if ;

    END ;
    ???
    -- 再演示以下代碼
    BEGIN
    ??
    DELETE ? FROM ?Rs_Employees
    ????
    Where ?HeTongId <= ' WL-090010 ' ;
    ??
    ??Dbms_Output.put_line(
    ' 已從表中刪除 ' || To_Char(sql % RowCount ) || ' 條記錄 ' );
    END ;???
    ???
    ?
    ?
    -- 例八:顯式游標
    --
    以下示例在所有游標的記錄中的Name字段中加一字串
    --
    同時在此示范了如何使用%NotFound屬性
    --
    set?serveroutput?on;
    Declare
    ??v_Id????Rs_Employees.Hetongid
    % type;
    ??v_name??Rs_Employees.Name
    % type;
    ??v_Count?
    Number : = 0 ;
    ??
    ??
    Cursor ?MyCur? Is
    ????
    SELECT ?HetongId,Name? FROM ?Rs_Employees
    ??????
    Where ?HeTongId <= ' WL-090010 ' ;
    ??????
    BEGIN
    ??
    -- 打開游標?
    ?? Open ?MyCur;
    ??
    -- 進入循環
    ??Loop
    ????
    Fetch ?MyCur? Into ?v_id,v_name;
    ????
    Exit ? When ?MyCur % NotFound;
    ????
    ????
    Update ?Rs_Employees
    ??????
    Set ?Name? = ?Name? || ? ' X '
    ??????
    Where ?HeTongId = v_Id;
    ????v_Count?:
    = ?v_Count? + ? 1 ;
    ??
    End ?Loop;
    ??
    ??Dbms_Output.put_line(
    ' 已更新 ' || v_Count || ' ' );
    END ;

    -- 例10:以下示范%RowCount和%IsOpen,同時示范了%RowType的使用
    --
    例10:以下示例%RowCount
    Declare
    ??v_Row???Rs_Employees
    % RowType;
    ?
    ??
    Cursor ?MyCur? Is
    ????
    SELECT ? * ? FROM ?Rs_Employees
    ??????
    Where ?HeTongId <= ' WL-090010 ' ;
    BEGIN
    ??
    if ? Not ?MyCur % IsOpen? then
    ????Dbms_Output.put_line(
    ' 游標未打開 ' );
    ????
    -- 打開游標?
    ???? Open ?MyCur;
    ??
    end ? if ;

    ??
    -- 進入循環
    ??Loop
    ????
    Fetch ?MyCur? Into ?v_row;
    ????
    Exit ? When ?MyCur % NotFound;
    ??
    ????Dbms_Output.put_line(
    ' 當前已取得 ' || MyCur % RowCount || ' ' );
    ????Dbms_Output.put_line(
    ' 姓名: ' || v_row.Name || ' ???? ' || ' 合同號: ' || v_row.HeTongId);
    ????Dbms_Output.put_line(
    '' );
    ??
    End ?Loop;
    ??
    ??Dbms_Output.put_line(
    ' 總共已取得 ' || MyCur % RowCount || ' ' );
    ??
    ??
    if ?MyCur % IsOpen? then
    ????Dbms_Output.put_line(
    ' 游標已打開 ' );
    ????
    Close ?MyCur;
    ??
    end ? if ;

    ??
    if ? Not ?MyCur % IsOpen? then
    ????Dbms_Output.put_line(
    ' 游標已關閉 ' );
    ??
    end ? if ;
    ??
    END ;

    -- 例12:查詢嵌套表中數據的游標
    --
    1?創建類型
    ?? CREATE ? OR ? REPLACE ?TYPE?emp_type? As ?Object?
    ???(eno???
    number ,
    ????ename?
    varchar2 ( 20 ),
    ????esal??
    number );
    -- 2?使用Table?of?子句創建Table類型
    ?? CREATE ?TYPE?emp_nt? AS ? Table ? Of ?emp_type;
    -- 3?使用emp_nt數據類型創建myemp表
    ?? CREATE ? TABLE ?myemp
    ???(deptno?????
    number ,
    ????edet???????emp_nt)
    ????NESTED?
    TABLE ?edet?Store? As ?myemployee;
    -- 4?初始化myemp的數據
    ?? Insert ? Into ?myemp? values
    ????(
    10 ,emp_nt(emp_type( 1000 , ' James ' ,? 10000 ),
    ???????????????emp_type(
    1001 , ' Daniel ' , 20000 )));
    ??
    Commit ;
    ??
    -- 執行下列代碼??
    Declare
    ??sal??
    number ;
    ??ena??
    varchar2 ( 20 );
    ??
    ??
    Cursor ?MyCur? Is
    ????
    SELECT ?a.esal,a.ename
    ??????
    FROM ?the?
    ??????(
    Select ?edet? From ?myemp
    ?????????
    Where ?deptno = 10 )?a;
    BEGIN
    ??
    -- 打開游標?
    ?? Open ?MyCur;
    ??
    -- 進入循環
    ??Loop
    ????
    Fetch ?MyCur? Into ?sal,ena;
    ????
    Exit ? When ?MyCur % NotFound;
    ????Dbms_Output.put_line(ena
    || ' ???? ' || sal);
    ??
    End ?Loop;
    ??
    ??
    Close ?MyCur;
    END ;




    -- 例13:此例改自例10,示范循環游標的用法
    Declare
    ??
    Cursor ?MyCur? Is
    ????
    SELECT ? * ? FROM ?Rs_Employees
    ??????
    Where ?HeTongId <= ' WL-090010 ' ;
    BEGIN

    ??
    For ?tmp_cur? In ?MyCur
    ??Loop
    ????Dbms_Output.put_line(
    ' 當前已取得 ' || MyCur % RowCount || ' ' );
    ????Dbms_Output.put_line(
    ' 姓名: ' || tmp_cur.Name || ' ???? ' || ' 合同號: ' || tmp_cur.HeTongId);
    ??
    End ?Loop;

    ??
    -- 在這種情況下,下面這條語句不能執行
    ?? -- Dbms_Output.put_line('當前已取得'||MyCur%RowCount||'行');
    END ;


    -- 再示范帶參數的游標
    Declare
    ??
    Cursor ?MyCur(m_HeTongId?Rs_Employees.Hetongid % type)? Is
    ????
    SELECT ? * ? FROM ?Rs_Employees
    ??????
    Where ?HeTongId <= m_HeTongId;
    BEGIN

    ??
    For ?tmp_cur? In ?MyCur( ' WL-090020 ' )
    ??Loop
    ????Dbms_Output.put_line(
    ' 當前已取得 ' || MyCur % RowCount || ' ' );
    ????Dbms_Output.put_line(
    ' 姓名: ' || tmp_cur.Name || ' ???? ' || ' 合同號: ' || tmp_cur.HeTongId);
    ??
    End ?Loop;

    ??
    -- 在這種情況下,下面這條語句不能執行
    ?? -- Dbms_Output.put_line('當前已取得'||MyCur%RowCount||'行');
    END ;


    -- 再示范以下寫法
    --
    在循環游標中使用查詢
    Declare
    ??v_HeTongId??Rs_Employees.Hetongid
    % type;
    BEGIN
    ??v_HeTongId?:
    = ? ' WL-090020 ' ;
    ??
    ??
    For ?tmp_cur? In ?( SELECT ? * ? FROM ?Rs_Employees
    ????????????????????
    Where ?HeTongId <= v_HeTongId)
    ??Loop
    ????Dbms_Output.put_line(
    ' 姓名: ' || tmp_cur.Name || ' ???? ' || ' 合同號: ' || tmp_cur.HeTongId);
    ??
    End ?Loop;
    END ;





    -- 例15:示范游標變量
    --
    此例要在Command?window或Sql?Plus中示范,結果會有點區別
    --
    SET?SERVEROUTPUT?ON;
    Declare
    ??TYPE?r1_cur?
    IS ?REF? CURSOR ;
    ??var1?r1_cur;
    ??no?????
    varchar2 ( 20 );
    ??
    ??v_czy??sc_chukudan.czy
    % type;
    ??v_pid??sc_chukudanDetail.Productid
    % type;
    ??
    BEGIN
    ??no?:
    = ? ' &你選擇的 ' ;

    ??
    IF ? UPPER (no)? = ? ' MASTER ' ? then
    ????
    OPEN ?var1? For
    ??????
    Select ?Czy? FROM ?sc_chukudan
    ????????
    Where ?ChuKuDanId? = ? ' SCKD04020001 ' ;
    ????
    FETCH ?var1? into ?v_Czy;
    ????Dbms_Output.put_line(
    ' 操作員是: ' || v_czy);
    ????
    CLOSE ?var1;
    ??
    ELSE
    ????
    OPEN ?var1? For
    ??????
    Select ?Productid? FROM ?sc_chukudanDetail
    ????????
    Where ?ChuKuDanId? = ? ' SCKD04020001 ' ;
    ????LOOP
    ??????
    FETCH ?var1? into ?v_pid;
    ??????
    EXIT ? WHEN ?var1 % NotFound;
    ??????Dbms_Output.put_line(
    ' 生產通知單ID是: ' || v_pid);
    ????
    END ?LOOP;
    ????
    CLOSE ?var1;
    ??
    END ? IF ;????
    END ;



    -- 例16: 游標中的更新和刪除
    --
    此例改自例8
    Declare
    ??
    -- 當打開此游標,將鎖住了相關記錄
    ?? Cursor ?MyCur? Is
    ????
    SELECT ?Name? FROM ?Rs_Employees
    ??????
    Where ?HeTongId <= ' WL-090010 '
    ??????
    For ? Update ? OF ?Name;
    ??????
    BEGIN
    ??
    For ?tmp_cur? in ?MyCur
    ??Loop
    ????
    Update ?Rs_Employees
    ??????
    Set ?Name? = ?Name? || ? ' X '
    ??????
    Where ? Current ? of ?MyCur;
    ??
    End ?Loop;
    END ;

    posted on 2006-04-20 00:32 record java and net 閱讀(902) 評論(3)  編輯  收藏 所屬分類: Database

    評論

    # re: oracle游標備忘 2006-04-20 10:32 song

    不錯。。

    多交流.e-mail:
    renxianqi2008@126.com

    希望能和我聯系一下..  回復  更多評論   

    # re: oracle游標備忘 2007-09-07 13:32 woodhead

    對例七有疑問:

    select into 在沒有記錄返回時是會報錯的:ora-01403  回復  更多評論   

    # re: oracle游標備忘 2009-02-05 10:05 klemo

    很不錯的例子  回復  更多評論   

    導航

    常用鏈接

    留言簿(44)

    新聞檔案

    2.動態語言

    3.工具箱

    9.文檔教程

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 成人精品国产亚洲欧洲| 亚洲国产日韩视频观看| 在线免费观看伊人三级电影| www国产亚洲精品久久久| 亚洲av永久无码精品网址| 日韩吃奶摸下AA片免费观看| 亚洲六月丁香六月婷婷蜜芽| 最近中文字幕免费2019| 久久亚洲国产精品成人AV秋霞 | 永久免费无码网站在线观看 | 一级特黄特色的免费大片视频| 四虎永久在线精品免费影视| 老湿机一区午夜精品免费福利| 亚洲日韩中文在线精品第一| 最新久久免费视频| 亚洲视频在线观看网站| 国产成人免费爽爽爽视频| 亚洲爆乳少妇无码激情| 亚洲一级特黄大片在线观看| a在线视频免费观看| 久久久久亚洲AV无码专区首JN| 0588影视手机免费看片| 亚洲国产午夜精品理论片在线播放| 国产gav成人免费播放视频| 国产人成网在线播放VA免费| 亚洲国产天堂在线观看| 猫咪社区免费资源在线观看 | 成人免费一区二区三区| 国产AⅤ无码专区亚洲AV| 免费无码作爱视频| 亚洲乱码一二三四区麻豆| 国产99视频精品免费视频7| 中文字幕免费在线视频| 亚洲欧洲自拍拍偷综合| 国产公开免费人成视频| 精品免费tv久久久久久久| 亚洲熟女www一区二区三区| 老司机亚洲精品影视www| 国产精品1024永久免费视频| 白白色免费在线视频| 亚洲网址在线观看|