<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
    主站蜘蛛池模板: 四虎成人免费网址在线| 精品无码国产污污污免费网站国产| 免费一区二区三区| 国产精品亚洲аv无码播放| sihu国产精品永久免费| 亚洲AⅤ优女AV综合久久久| 亚洲视频一区调教| 男人进去女人爽免费视频国产| japanese色国产在线看免费| 亚洲欧洲日产国码一级毛片| 一级做a爱片特黄在线观看免费看| 亚洲人成网站在线观看青青| 国产精品无码永久免费888| 亚洲欧洲∨国产一区二区三区| a毛片免费播放全部完整| 亚洲精品在线观看视频| 国产成人精品免费午夜app| 五月天婷亚洲天综合网精品偷| 一级成人生活片免费看| 久久精品夜色国产亚洲av| 成人免费观看一区二区| 亚洲色无码国产精品网站可下载| 国产成人免费高清激情视频| 日韩色视频一区二区三区亚洲 | 亚洲中文字幕无码爆乳AV| 青青操免费在线视频| 亚洲综合日韩中文字幕v在线| 在线观看永久免费| 亚洲熟妇丰满xxxxx| 亚洲精品国产福利一二区| 久久久国产精品无码免费专区| 亚洲人成电影网站| 国产午夜影视大全免费观看| 中文在线免费看视频| 亚洲国产精品乱码在线观看97| 免费真实播放国产乱子伦| 97在线免费视频| 久久亚洲精品国产亚洲老地址| 又粗又大又猛又爽免费视频| 国产精成人品日日拍夜夜免费 | 国产精品亚洲专区一区|