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

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

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

    Decode360's Blog

    業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    PLSQL學(xué)習(xí)(一) 基礎(chǔ)知識
    ?
    ??? 很久以前自己整理的PLSQL一些基礎(chǔ)知識,翻出來看看都是比較基礎(chǔ)的內(nèi)容,還是放上來好了。參考的資料是《PL/SQL用戶指南與參考》中譯版,覺得這是一部很不錯的入門書,感謝把這本書翻譯出來的網(wǎng)友。
    ?
    ?
    1、乘方的不同應(yīng)用:
    ?
    ??? 在SQL中乘方只能使用函數(shù)Power(a,b)來計算
    ??? 但在PLSQL中可直接使用a**b表示
    ?
    2、賦值語句Returning:

    ?

    ?? insert into t1 values ( 90 , 'SERVICE' , 'BEIJING' )

    ?? Returning rowid , name into row_id,info;

    ??? 注:只限insert、update、delete一條記錄時進(jìn)行賦值
    ?
    3、自定義參數(shù)——&:
    ?
    ??? 可SQL和PLSQL中均可使用自定義參數(shù),即需要自己輸入值的參數(shù)
    ??? select * from ldcom where comcode=&a andname=&b;
    ??? PLSQL:
    ??? declare i int := &a;?? n int := &b;
    ?
    4、綁定變量的使用:
    ?
    ??? 可使用綁定變量的辦法提高SQL效率

    ?

    ??? SQL> variable x number ;

    ??? SQL> exec :x := 8600 ;

    ??? SQL> select * from ldcom where comcode= :x ;

    ??? 注:PLSQL中的declare即隱士綁定,無需再申明
    ?
    ??? 可用Print查看綁定變量? SQL> print x;
    ??? 也可使用查詢? SQL> select :x from dual;
    ?
    ??? 實際的簡單應(yīng)用: ???

    ?

    ??? variable x number ;

    ?

    ??? declare

    ????? v_date date ;

    ??? begin

    ????? for i in ? 1 .. 10 loop

    ??? ??? :x := i;

    ??? ??? select sysdate +:x into v_date from dual;

    ??? ??? dbms_output.put_line(v_date);

    ??? ? end loop ;

    ??? end ;

    ??? /

    ?
    ??? 在execute immediate中的應(yīng)用: ???

    ?

    ??? declare

    ??? v_x t1.num% type ;

    ??? begin

    ??? execute immediate 'update t1 set num=8888 where id=:a returning num into :b'

    ??? using 2 returning into v_x;

    ??? dbms_output.put_line(v_x);

    ??? end ;

    ??? 注意returning的返回值在動態(tài)SQL中的操作格式

    ?
    5、%TYPE和%ROWTYPE的區(qū)別:
    ?
    ??? %TYPE針對某一字段類型(數(shù)組也是單一的類型)
    ??? %ROWTYPE針對某一整表的類型(游標(biāo)也是整表)
    ?
    6、計數(shù)循環(huán)的逆序法:

    ?

    ??? for i in reverse 10 .. 100 loop

    ??? 注意reverse的位置不要記錯
    ?
    7、一般的游標(biāo)使用法:
    ?
    ??? 1、游標(biāo)的正常使用需要四步
    ?
    ??? ①定義游標(biāo)

    ??? cursor c2(dept_no number default 10 ) is----注意定義dept_no的方法

    ??? select name ,agentcode from laagent where rownum <= dept_no;

    ??? ②打開游標(biāo)

    ??? open c3(dept_no => 20 ); ---- 可以重新定義 dept_no

    ??? ③提取游標(biāo)數(shù)據(jù)

    ??? fetch c2 into dept_name,dept_loc; ---- 字符類型、個數(shù)相等

    ??? fetch c3 into deptrec; ----deptrec rowtype

    ??? exit when c3% notfound ;

    ??? ④關(guān)閉游標(biāo)

    ??? CLOSE c3;

    ??? 游標(biāo)屬性

    ??? % FOUND ????? -- 布爾型屬性,當(dāng)最近一次讀記錄時成功返回 , 則值為 TRUE

    ??? % NOTFOUND ?? -- 布爾型屬性,與 %FOUND 相反;

    ??? % ISOPEN ???? -- 布爾型屬性,當(dāng)游標(biāo)已打開時返回 TRUE

    ??? % ROWCOUNT ?? -- 數(shù)字型屬性,返回已從游標(biāo)中讀取的記錄數(shù)。

    ?
    ??? 2、 使用for自動打開、提取、關(guān)閉游標(biāo)

    ?

    ??? FOR c1_rec IN c1 LOOP

    ??? FOR c1_rec IN ( SELECT dname, loc FROM dept) LOOP

    ?
    ??? 3、注:單一的SQL語句都是一個隱式的游標(biāo),屬性為

    ?

    ??? SQL% FOUND ????? -- 布爾型屬性,當(dāng)最近一次讀記錄時成功返回 , 則值為 TRUE

    ??? SQL% NOTFOUND ?? -- 布爾型屬性,與 %FOUND 相反;

    ??? SQL% ISOPEN ???? -- 布爾型屬性,當(dāng)游標(biāo)已打開時返回 TRUE

    ??? SQL% ROWCOUNT ?? -- 數(shù)字型屬性,返回已從游標(biāo)中讀取的記錄數(shù)。

    ??? 例如:DELETEFROM emp WHERE deptno=v_deptno;

    ????? ?? IF SQL % NOTFOUND THEN ...

    ?
    8、For Update鎖定數(shù)據(jù):

    ?

    ??? CURSOR emp_cursor is select empno,sal

    ??? from emp where deptno=v_deptno for update of sal nowait ;

    ??? 注意:其中的of sal,for update可以精確到某一個或幾個字段
    ?
    ??? 在使用了For Update之后可以在delete和update語句中使用current of cursor_name子句

    ??? for emp_record in emp_cursor loop

    ? ??? if emp_record.sal < 1500 then

    ????? ? update emp set sal= 1500 where current of emp_cursor;

    ? ??? end if ;

    ??? end loop ;

    ??? 但需注意:只能針對for update的表進(jìn)行修改。

    ?
    9、Package中的子程序可以重載
    ?
    ??? 即函數(shù)名相同,參數(shù)個數(shù)不同
    ?
    10、PL/SQL的執(zhí)行順序
    ?
    ??? 在同一Package中,若要使用自身定義的Function或Procedure,則必須是之前定義過的。
    ??? 同理,即便使用參數(shù),也必須在前面定義過。
    ??? 也就是說:一般最終的執(zhí)行程序,會放在Package的最后,除非將所有部分都申明成Public。
    ?
    ?
    posted on 2008-08-07 22:17 decode360 閱讀(1519) 評論(0)  編輯  收藏 所屬分類: 06.PLSQL
    主站蜘蛛池模板: 国产亚洲精品a在线观看| 啦啦啦www免费视频| 亚洲一区二区高清| 精品免费AV一区二区三区| 免费看的一级毛片| 亚洲色大成网站www永久网站| 无码高潮少妇毛多水多水免费| 精品亚洲AV无码一区二区三区| 在线观看成人免费视频不卡| 亚洲首页国产精品丝袜| 色妞WWW精品免费视频| 亚洲国产成人久久一区二区三区| 在线免费观看国产视频| 男人j进女人p免费视频| 亚洲区小说区图片区QVOD| 久久成人免费电影| 亚洲日本人成中文字幕| 免费观看午夜在线欧差毛片| a在线视频免费观看在线视频三区| 亚洲精品无码乱码成人| 精品一区二区三区免费毛片爱| 亚洲综合偷自成人网第页色| 日韩免费无砖专区2020狼| 中文字幕免费在线视频| 亚洲综合激情另类小说区| 日韩免费视频播播| AAA日本高清在线播放免费观看| 亚洲电影在线播放| 免费观看午夜在线欧差毛片| 免费福利电影在线观看| 亚洲一区二区三区高清不卡 | 男女啪啪免费体验区| 久久噜噜噜久久亚洲va久| 无码日韩人妻av一区免费| 色婷婷综合缴情综免费观看| 亚洲国产成人久久综合一| 免费看大美女大黄大色| 两个人看的www免费视频| 亚洲综合色婷婷在线观看| 中文字幕在亚洲第一在线| a拍拍男女免费看全片|