<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語句備查

    備用。。

    PLSQL表

    CREATE?OR?REPLACE?PROCEDURE?MY_PLSQL_TABLE?AS
    ??
    --定義一個PL/SQL表
    ??TYPE?MyType?IS?Table?OF?Rs_Employees.Name%Type?
    ????
    Index?By?Binary_Integer;
    ??
    --定義二個變量
    ??MyTable?MyType;
    ??i???????binary_integer:
    =0;
    ??
    ??
    --通過循環取出PL/SQL表中的第一條記錄的序號及內容
    ??Procedure?MyOutPut?Is
    ??
    Begin
    ????I?:
    =?MyTable.First;
    ????Dbms_Output.put_line(
    ''||To_char(I)||'行為:'||MyTable(I));
    ????Loop
    ??????I?:
    =?MyTable.Next(I);
    ??????Dbms_Output.put_line(
    ''||To_char(I)||'行為:'||MyTable(I));
    ??????
    Exit?When?I>=?MyTable.Last;
    ????
    End?Loop;
    ??
    End;
    ??
    BEGIN
    ??
    --通過游標往PL/SQL表中寫入數據
    ??FOR?tmp_cur?in?(SELECT?HeTongId,Name?
    ???????????????????
    From?Rs_Employees?
    ???????????????????
    Where?HeTongId<='WL-090010')
    ??LOOP
    ????i??????????:
    =?i?+?1;
    ????MyTable(i)?:
    =?tmp_cur.Name;
    ????Dbms_Output.put_line(
    '原表中合同號為:'||tmp_cur.hetongid||'??姓名為:'||tmp_cur.Name);
    ????Dbms_Output.put_line(
    'PL/SQL表中姓名為:'||Mytable(i));
    ??
    END?LOOP;

    ??
    --跳過前面的順序,有意增加一條記錄
    ??MyTable(80)?:=?'XW';
    ??
    ??
    --?顯示PL/SQL表相關信息
    ??Dbms_Output.put_line('');
    ??Dbms_Output.put_line(
    'PL/SQL表的總行數為:??'||MyTable.count||'');
    ??Dbms_Output.put_line(
    'PL/SQL表的第一行為:??'||MyTable.First||'?'||MyTable(MyTable.First));
    ??Dbms_Output.put_line(
    'PL/SQL表的最后一行為:'||MyTable.Last||'?'||MyTable(MyTable.Last));
    ??
    ??
    --顯示最后一條相關信息
    ??Dbms_Output.put_line('');
    ??Dbms_Output.put_line(
    'PL/SQL表的第80行為:????'||MyTable(80));
    ??Dbms_Output.put_line(
    'PL/SQL表的第80行之后為:'||MyTable.Next(80));
    ??
    ??
    --示范通過循環取出PL/SQL表中的每一條記錄的序號及內容
    ??Dbms_Output.put_line('');
    ??MyOutPut;

    ??
    --示范從PL/SQL表中刪除行
    ??Dbms_Output.put_line('');
    ??MyTable.
    Delete(3);
    ??Dbms_Output.put_line(
    '已從PL/SQL表刪除第3行');
    ??Dbms_Output.put_line(
    '現在PL/SQL表的總行數為:??'||MyTable.count||'');
    ??
    --通過循環取出PL/SQL表中的每一條記錄的序號及內容
    ??MyOutPut;
    ??
    ??
    --示范從PL/SQL表中刪除行
    ??Dbms_Output.put_line('');
    ??MyTable.
    Delete;
    ??Dbms_Output.put_line(
    '已從PL/SQL表刪除全部行');
    ??Dbms_Output.put_line(
    '現在PL/SQL表的總行數為:??'||MyTable.count||'');

    ??
    --取消以下注釋將會引發異常
    ??Dbms_Output.put_line('');
    ??
    --MyOutPut;

    ?Exception
    ???
    --修改上面的代碼,有意觸發此異常
    ???--此示例說明了,只有對PL/SQL表中進行了賦值的記錄才可以引用;但不需要按順序對每條
    ???--記錄進行賦值;如果試圖訪問沒有賦值的記錄,將會引發錯誤;通過集合函數對PL/SQL表
    ???--進行操作時,如果超出了記錄范圍,則返回空值???
    ???When?Others?then
    ?????Dbms_Output.put_line(
    '發生了錯誤!'||I);
    END;
    記錄
    DECLARE
    ??
    --聲明一個記錄類型
    ??TYPE?TYPE_RSRECORD?IS?RECORD?
    ???(HETONGID???RS_EMPLOYEES.HeTongId
    %Type,
    ????NAME???????RS_EMPLOYEES.Name
    %type,
    ????SEX????????RS_EMPLOYEES.Sex
    %type,
    ????DEPARTMENT?RS_EMPLOYEES.Department
    %type,
    ????HIREDATE???RS_EMPLOYEES.Hiredate
    %type);
    ??
    --定義一個記錄變量
    ??Rs_REcord???TYPE_RSRECORD;
    ??
    ??
    --定義一個游標
    ??Cursor?MyCursor?Is
    ????
    SELECT?*?From?Rs_Employees?
    ?????
    Where?HeTongId<='WL-090010';
    BEGIN
    ??
    --通過游標往記錄中寫入數據
    ??Open?MyCursor;
    ??Loop
    ????
    Fetch?MyCursor?Into?Rs_Record;
    ????
    Exit?When?MyCursor%Notfound;
    ????Dbms_Output.put_line(
    '合同號為:'||Rs_Record.hetongid||'??姓名為:'||Rs_Record.Name);
    ??
    End?Loop;

    ??
    Close?MyCursor;
    END;
    /

    可變數組

    DECLARE
    ??TYPE?itemcode1??
    IS?varray(5)?of?varchar2(5);
    ??TYPE?qty_ord1???
    IS?varray(5)?of?Number(5);
    ??TYPE?qty_deld1??
    IS?varray(5)?of?Number(5);
    ??
    ??v_itemcode?????itemcode1;
    ??v_qty_ord??????qty_ord1?:
    =?qty_ord1(1,2);
    ?
    BEGIN
    ??
    IF?v_itemcode?is?NULL?Then
    ????DBMS_OUTPUT.put_line(
    'v_itemcode包含空值');
    ??
    END?IF;
    ??
    ??
    IF?v_qty_ord?is?NULL?Then
    ????DBMS_OUTPUT.put_line(
    'v_qty_ord包含空值');
    ??
    ELSE
    ????DBMS_OUTPUT.put_line(
    'v_qty_ord非空');
    ??
    END?IF;
    END;
    /

    ??
    ??
    批量綁定
    --先建立一張表,用于測試
    CREATE?TABLE?VENDOR
    ?(VENCODE?
    VARCHAR2(5),
    ??VENNAME?
    VARCHAR2(15));

    --測試批量綁定??????
    DECLARE?
    ??
    --定義二張PL/SQL表
    ??TYPE?NumTab??Is?Table?Of?VarCHAR2(5)??INDEX?BY?BINARY_INTEGER;
    ??TYPE?NameTab?
    Is?Table?Of?VarCHAR2(15)?INDEX?BY?BINARY_INTEGER;
    ??vnums??NumTab;
    ??vNames?NameTab;
    ??
    --三個時間變量
    ??t1?varchar2(5);
    ??t2?
    varchar2(5);
    ??t3?
    varchar2(5);
    ??
    ??
    --捕獲當前時間的過程
    ??Procedure?get_time(t?Out?Number)?Is
    ??
    BEGIN
    ????
    SELECT?TO_CHAR(SYSDATE,'SSSSS')?INTO?t?FROM?DUAL;
    ??
    END;

    BEGIN
    ??
    FOR?j?IN?1..20000
    ??LOOP
    ????vnums(j)??:
    =j;
    ????vNames(j)?:
    ='vendor'?||?To_char(j);
    ??
    End?loop;
    ??
    ??get_time(t1);

    ??
    --用FOR循環插入
    ??For?i?In?1..20000?
    ??LOOP
    ????
    Insert?Into?vendor?(vencode,venname)
    ??????
    Values(vnums(i),vnames(i));
    ??
    END?LOOP;
    ??get_time(t2);
    ??
    ??
    --用FORALL插入
    ??FORALL?i?In?1..20000
    ????
    Insert?Into?vendor?(vencode,venname)
    ??????
    Values(vnums(i),vnames(i));
    ??get_time(t3);
    ????
    ??DBMS_OUTPUT.put_line(
    '執行時間(秒)');
    ??DBMS_OUTPUT.put_line(
    '--------------------------');
    ??DBMS_OUTPUT.put_line(
    'For循環:'||To_char(t2-t1));
    ??DBMS_OUTPUT.put_line(
    'ForAll:?'||To_char(t3-t2));
    End;
    /

    抽象數據類型

    ?

    CREATE?OR?REPLACE?TYPE?address_ty?AS?OBJECT
    ??(street_no???????????
    number(3),
    ???street_name?????????
    varchar2(20),
    ???city????????????????
    varchar2(20),
    ???state???????????????
    varchar2(20));

    CREATE?TABLE?vend_mast
    ?(vencode????
    varchar2(5),
    ??venname????
    varchar2(15),
    ??venadd?????address_ty,
    ??tel_no?????
    number(10));
    ??
    INSERT?INTO?vend_mast?VALUES
    ?(
    'v100','john',address_ty(110,'Clinton?Rd??','Rosewood','Columbia'),
    ??
    234465987);


    SELECT?*?FROM?vend_mast;


    select?a.venadd.city?from?vend_mast?a;

    UPDATE?vend_mast?a
    ??
    set?a.venadd.street_no?=?10
    ??
    WHERE?venname='john';


    DELETE?FROM?vend_mast?a
    ??
    WHERE?a.venadd.city='Rosewood';

    DROP?TYPE?address_ty;


    CREATE?INDEX?streetnum?ON?vend_mast?(venadd.street_no);

    CREATE?OR?REPLACE?TYPE?Student_typ?AS?OBJECT?
    ??(ssn????
    number,
    ???Name???
    varchar2(30),
    ???Address?
    varchar2(100))?NOT?FINAL






    對象表.
    CREATE?TYPE?vend_ty?AS?Object
    ?(vencode?
    varchar2(5),
    ??venname?
    varchar2(20),
    ??venadd1?
    varchar2(20),
    ??venadd2?
    varchar2(20),
    ??venadd3?
    varchar2(20),
    ??tel_no?
    number(6));
    ????
    CREATE?TABLE?vend_master?OF?vend_ty
    ?(vencode?
    CONSTRAINT?VC_PK?PRIMARY?KEY);
    ?
    ?
    INSERT?INTO?vend_master?values?
    ??(vend_ty(
    'v201','John','10','Fezinnith','Mexico',948456));
    ??
    SELECT?vencode?FROM?vend_master;



    對象視圖
    CREATE?TABLE?item
    ?(itemcode?
    varchar2(10),
    ??item_on_hand?
    number(10),
    ??item_sold?
    number(10));

    CREATE?OR?REPLACE?TYPE?ITEM_TYPE?AS?OBJECT
    ?(itemcode?
    varchar2(10),
    ??item_on_hand?
    number(10),
    ??item_sold?
    number(10));
    ????
    CREATE?VIEW?ITEM_VIEW?OF?ITEM_TYPE?
    ?
    with?object?oid(itemcode)?As
    ?
    SELECT?*?FROM?ITEM?WHERE?ITEM_ON_HAND?<?20;

    INSERT?INTO?ITEM?VALUES?('i201',10,5);
    INSERT?INTO?item_view?Values?(item_type('i102',15,50));
    ?
    select?*?from?item_view;

    DELETE?FROM?ITEM_VIEW?WHERE?ItEMCODE='i102';


    可變數組

    CREATE?TYPE?itemcode??AS?varray(5)?of?varchar2(5);
    CREATE?TYPE?qty_ord???AS?varray(5)?of?number(5);
    CREATE?TYPE?qty_deld??AS?varray(5)?of?number(5);

    CREATE?TABLE?ORDER_DETAIL
    ?(ORDERNO????
    VARCHAR2(5),
    ??ITEM_VA????ITEMCODE,
    ??QTY_VA?????QTY_ORD,
    ??QTYD_VA????QTY_DELD);
    ??
    INSERT?INTO?order_detail?VALUES?
    ?(
    'o100',itemcode('i100','i101','i102','i103','i104'),
    ??qty_ord(
    100,98,49,39,20),
    ??qty_deld(
    100,900,800,700,600));
    ??
    INSERT?INTO?order_detail?VALUES?
    ?(
    'o101',itemcode('i102','i103','i104'),
    ??qty_ord(
    100,98,20),
    ??qty_deld(
    100,900));
    ???
    ???
    SELECT?*?FROM?ORDER_DETAIL;

    嵌套表

    CREATE?TYPE?ord_ty?As?Object
    ?(itemcode??
    varchar2(5),
    ??qty_ord???
    number(5),
    ??qty_deld??
    number(5));
    ??
    CREATE?TYPE?ord_nt?AS?Table?OF?ord_ty;

    CREATE?TABLE?order_master
    ?(orderno????
    varchar2(5),
    ??odate??????date,
    ??vencode????
    varchar2(5),
    ??dets???????ord_nt)??
    ??NESTED?
    TABLE?dets?STORE?AS?ord_nt_tab;


    INSERT?INTO?order_master?VALUES?
    ??(
    'o100',To_date('18-07-99','dd-mm-yy'),'v001',
    ????ord_nt(
    ??????ord_ty(
    'i100',10,5),
    ??????ord_ty(
    'i101',50,25),
    ??????ord_ty(
    'i102',5,5)
    ?????)
    ??);
    ????
    INSERT?INTO?TABLE?(SELECT?p.dets?
    ??
    FROM?order_master?p
    ??
    WHERE?p.orderno='o100')
    ??
    Values?('i103',30,25);
    ??

    SELECT?*?FROM?TABLE?(SELECT?t.dets?FROM?order_master?t?
    ??
    Where?t.orderno?=?'o100');
    ??
    UPDATE?TABLE?(SELECT?e.dets?from?order_master?e
    ??
    WHERE?e.orderno?=?'o100')?p
    ??
    SET?VALUE(p)?=?ord_ty('i103',50,45)
    ??
    Where?p.itemcode?=?'i103';
    ??
    DELETE?FROM?TABLE?(SELECT?e.dets?from?order_master?e
    ??
    WHERE?e.orderno?=?'o100')?p
    ??
    Where?p.itemcode?=?'i103';

    posted on 2006-05-09 08:49 record java and net 閱讀(710) 評論(1)  編輯  收藏 所屬分類: Database

    評論

    # re: oracle語句備查 2006-05-09 10:44 寒晴天

    嘿嘿。  回復  更多評論   

    導航

    常用鏈接

    留言簿(44)

    新聞檔案

    2.動態語言

    3.工具箱

    9.文檔教程

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲欧美日韩自偷自拍| 久久免费视频观看| 亚洲综合伊人久久大杳蕉| 久久久久久免费一区二区三区| 亚洲精品福利网泷泽萝拉| 国产在线不卡免费播放| 免费高清国产视频| 亚洲国产精品网站在线播放| 国产亚洲日韩一区二区三区| 30岁的女人韩剧免费观看| 国产精品亚洲专一区二区三区| 亚洲av无码国产精品夜色午夜| 国内外成人免费视频| 成人久久免费网站| 亚洲老熟女五十路老熟女bbw | 午夜视频在线免费观看| 国产亚洲精品bv在线观看| 亚洲区小说区激情区图片区| 毛片在线免费视频| 99re在线视频免费观看| 免费精品国自产拍在线播放| 亚洲制服丝袜在线播放| 亚洲国产精品成人久久| 国产精品视频免费一区二区三区| 污污网站18禁在线永久免费观看| 美女羞羞喷液视频免费| 亚洲三级在线免费观看| 亚洲av日韩av不卡在线观看 | 亚洲在成人网在线看| 亚洲精品无码永久中文字幕| 手机看片久久国产免费| 在人线av无码免费高潮喷水| 久久精品成人免费观看| 国产精品免费久久久久久久久| 男人的天堂av亚洲一区2区| 亚洲喷奶水中文字幕电影| 亚洲AV日韩AV永久无码免下载| 亚洲国产婷婷综合在线精品 | 亚洲日本在线观看| 精品国产综合成人亚洲区| 国产成人精品久久亚洲|