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

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

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

    posts - 38, comments - 2, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    oracle 存儲(chǔ)過(guò)程的基本語(yǔ)法

    Posted on 2009-07-01 16:17 AntiquMan 閱讀(250) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Oracle

    1.基本結(jié)構(gòu)
    CREATE OR REPLACE PROCEDURE 存儲(chǔ)過(guò)程名字
    (
        參數(shù)1 IN NUMBER,
        參數(shù)2 IN NUMBER
    ) IS
    變量1 INTEGER :=0;
    變量2 DATE;
    BEGIN

    END 存儲(chǔ)過(guò)程名字

    2.SELECT INTO STATEMENT
      將select查詢(xún)的結(jié)果存入到變量中,可以同時(shí)將多個(gè)列存儲(chǔ)多個(gè)變量中,必須有一條
      記錄,否則拋出異常(如果沒(méi)有記錄拋出NO_DATA_FOUND)
      例子:
      BEGIN
      SELECT col1,col2 into 變量1,變量2 FROM typestruct where xxx;
      EXCEPTION
      WHEN NO_DATA_FOUND THEN
          xxxx;
      END;
      ...

    3.IF 判斷
      IF V_TEST=1 THEN
        BEGIN
           do something
        END;
      END IF;

    4.while 循環(huán)
      WHILE V_TEST=1 LOOP
      BEGIN
     XXXX
      END;
      END LOOP;

    5.變量賦值
      V_TEST := 123;

    6.用for in 使用cursor
      ...
      IS
      CURSOR cur IS SELECT * FROM xxx;
      BEGIN
     FOR cur_result in cur LOOP
      BEGIN
       V_SUM :=cur_result.列名1+cur_result.列名2
      END;
     END LOOP;
      END;

    7.帶參數(shù)的cursor
      CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
      OPEN C_USER(變量值);
      LOOP
     FETCH C_USER INTO V_NAME;
     EXIT FETCH C_USER%NOTFOUND;
        do something
      END LOOP;
      CLOSE C_USER;

    8.用pl/sql developer debug
      連接數(shù)據(jù)庫(kù)后建立一個(gè)Test WINDOW
      在窗口輸入調(diào)用SP的代碼,F9開(kāi)始debug,CTRL+N單步調(diào)試

     

    關(guān)于oracle存儲(chǔ)過(guò)程的若干問(wèn)題備忘
    1.在oracle中,數(shù)據(jù)表別名不能加as,如:

    select a.appname from appinfo a;-- 正確
    select a.appname from appinfo as a;-- 錯(cuò)誤
     也許,是怕和oracle中的存儲(chǔ)過(guò)程中的關(guān)鍵字as沖突的問(wèn)題吧

    2.在存儲(chǔ)過(guò)程中,select某一字段時(shí),后面必須緊跟into,如果select整個(gè)記錄,利用游標(biāo)的話(huà)就另當(dāng)別論了。

      select af.keynode into kn from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 有into,正確編譯
      select af.keynode from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 沒(méi)有into,編譯報(bào)錯(cuò),提示:Compilation
      Error: PLS-00428: an INTO clause is expected in this SELECT statement


    3.在利用select...into...語(yǔ)法時(shí),必須先確保數(shù)據(jù)庫(kù)中有該條記錄,否則會(huì)報(bào)出"no data found"異常。

       可以在該語(yǔ)法之前,先利用select count(*) from 查看數(shù)據(jù)庫(kù)中是否存在該記錄,如果存在,再利用select...into...

    4.在存儲(chǔ)過(guò)程中,別名不能和字段名稱(chēng)相同,否則雖然編譯可以通過(guò),但在運(yùn)行階段會(huì)報(bào)錯(cuò)

     select keynode into kn from APPFOUNDATION where appid=aid and foundationid=fid;-- 正確運(yùn)行
    select af.keynode into kn from APPFOUNDATION af where af.appid=appid and af.foundationid=foundationid;-- 運(yùn)行階段報(bào)錯(cuò),提示
    ORA-01422:exact fetch returns more than requested number of rows
    5.在存儲(chǔ)過(guò)程中,關(guān)于出現(xiàn)null的問(wèn)題

    假設(shè)有一個(gè)表A,定義如下:
    create table A(
    id varchar2(50) primary key not null,
    vcount number(8) not null,
    bid varchar2(50) not null -- 外鍵
    );如果在存儲(chǔ)過(guò)程中,使用如下語(yǔ)句:
    select sum(vcount) into fcount from A where bid='xxxxxx';如果A表中不存在bid="xxxxxx"的記錄,則fcount=null(即使fcount定義時(shí)設(shè)置了默認(rèn)值,如:fcount number(8):=0依然無(wú)效,fcount還是會(huì)變成null),這樣以后使用fcount時(shí)就可能有問(wèn)題,所以在這里最好先判斷一下:
    if fcount is null then
        fcount:=0;
    end if;這樣就一切ok了。

    6.Hibernate調(diào)用oracle存儲(chǔ)過(guò)程

            this.pnumberManager.getHibernateTemplate().execute(
                    new HibernateCallback() ...{
                        public Object doInHibernate(Session session)
                                throws HibernateException, SQLException ...{
                            CallableStatement cs = session
                                    .connection()
                                    .prepareCall("{call modifyapppnumber_remain(?)}");
                            cs.setString(1, foundationid);
                            cs.execute();
                            return null;
                        }
                    });
     

     

    主站蜘蛛池模板: 9277手机在线视频观看免费| 99久久人妻精品免费一区| 亚洲日韩欧洲无码av夜夜摸| 久久国产精品免费观看| 亚洲一区二区无码偷拍| 亚洲色中文字幕无码AV| 久久久久久国产a免费观看黄色大片 | 亚洲成a人片在线观看天堂无码 | 日韩亚洲变态另类中文| 亚洲精品视频在线免费| 免费人人潮人人爽一区二区| 4444亚洲国产成人精品| 亚洲AⅤ优女AV综合久久久| 久久精品国产免费观看 | 最近中文字幕大全免费版在线| ww亚洲ww在线观看国产| 91麻豆国产自产在线观看亚洲| 9久9久女女免费精品视频在线观看| 日韩在线视频播放免费视频完整版| 亚洲国产精品综合一区在线| 亚洲中文无韩国r级电影| 成人免费午夜在线观看| APP在线免费观看视频| 美女黄频免费网站| 中文字幕亚洲综合久久综合| 亚洲AV无码一区二区三区DV| 亚洲精品无码永久在线观看| 久久精品a一国产成人免费网站| 永久免费av无码网站yy| 特级毛片在线大全免费播放| 成人亚洲国产va天堂| 久久精品国产亚洲av麻豆色欲| 亚洲男人天堂2020| 日韩a级毛片免费视频| 免费精品国产日韩热久久| a级午夜毛片免费一区二区| 男人和女人高潮免费网站| 亚洲国产综合精品中文第一| 在线观看亚洲人成网站| 国产精品亚洲精品日韩已满| 中文字幕亚洲一区|