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

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

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

    Decode360's Blog

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    PLSQL學習(一) 基礎知識
    ?
    ??? 很久以前自己整理的PLSQL一些基礎知識,翻出來看看都是比較基礎的內容,還是放上來好了。參考的資料是《PL/SQL用戶指南與參考》中譯版,覺得這是一部很不錯的入門書,感謝把這本書翻譯出來的網友。
    ?
    ?
    1、乘方的不同應用:
    ?
    ??? 在SQL中乘方只能使用函數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一條記錄時進行賦值
    ?
    3、自定義參數——&:
    ?
    ??? 可SQL和PLSQL中均可使用自定義參數,即需要自己輸入值的參數
    ??? 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;
    ?
    ??? 實際的簡單應用: ???

    ?

    ??? 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中的應用: ???

    ?

    ??? 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的返回值在動態SQL中的操作格式

    ?
    5、%TYPE和%ROWTYPE的區別:
    ?
    ??? %TYPE針對某一字段類型(數組也是單一的類型)
    ??? %ROWTYPE針對某一整表的類型(游標也是整表)
    ?
    6、計數循環的逆序法:

    ?

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

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

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

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

    ??? ②打開游標

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

    ??? ③提取游標數據

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

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

    ??? exit when c3% notfound ;

    ??? ④關閉游標

    ??? CLOSE c3;

    ??? 游標屬性

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

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

    ??? % ISOPEN ???? -- 布爾型屬性,當游標已打開時返回 TRUE

    ??? % ROWCOUNT ?? -- 數字型屬性,返回已從游標中讀取的記錄數。

    ?
    ??? 2、 使用for自動打開、提取、關閉游標

    ?

    ??? FOR c1_rec IN c1 LOOP

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

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

    ?

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

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

    ??? SQL% ISOPEN ???? -- 布爾型屬性,當游標已打開時返回 TRUE

    ??? SQL% ROWCOUNT ?? -- 數字型屬性,返回已從游標中讀取的記錄數。

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

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

    ?
    8、For Update鎖定數據:

    ?

    ??? 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的表進行修改。

    ?
    9、Package中的子程序可以重載
    ?
    ??? 即函數名相同,參數個數不同
    ?
    10、PL/SQL的執行順序
    ?
    ??? 在同一Package中,若要使用自身定義的Function或Procedure,則必須是之前定義過的。
    ??? 同理,即便使用參數,也必須在前面定義過。
    ??? 也就是說:一般最終的執行程序,會放在Package的最后,除非將所有部分都申明成Public。
    ?
    ?
    posted on 2008-08-07 22:17 decode360 閱讀(1519) 評論(0)  編輯  收藏 所屬分類: 06.PLSQL
    主站蜘蛛池模板: 国产不卡免费视频| 国产乱妇高清无乱码免费| 亚洲av伊人久久综合密臀性色| 国产精品二区三区免费播放心| 91精品免费不卡在线观看| 国产福利电影一区二区三区,免费久久久久久久精 | a级毛片免费播放| 美国免费高清一级毛片| 亚洲最大无码中文字幕| 久久亚洲AV成人无码电影| 亚洲日韩中文无码久久| 亚洲精品乱码久久久久久| 四虎影视永久免费观看网址| 波多野结衣在线免费观看| 亚洲熟妇AV一区二区三区宅男| 久久久久亚洲AV成人片| 亚洲AV无码精品色午夜在线观看| 亚洲午夜AV无码专区在线播放| 午夜无码A级毛片免费视频| 亚洲中文字幕无码中文字| 亚洲欧洲国产精品久久| 91精品国产亚洲爽啪在线影院 | 有码人妻在线免费看片| 精品在线免费视频| 亚洲AV无码精品国产成人| 亚洲码欧美码一区二区三区| 亚洲永久在线观看| 欧洲亚洲国产清在高| 亚洲综合熟女久久久30p| 亚洲一区二区三区香蕉| 丁香五月亚洲综合深深爱| 亚洲午夜福利717| 亚洲国产三级在线观看| 国产AV无码专区亚洲AV男同 | 久久精品免费视频观看| 成人爽a毛片免费| 88av免费观看| 久久久www成人免费毛片| 免费看大美女大黄大色| 国产免费牲交视频| 国产亚洲精品看片在线观看 |