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

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

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

    飛翔的起點

    從這里出發

    導航

    <2008年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    統計

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    關于存儲過程(一)

    oracle 存儲過程的基本語法

     

     

    1.基本結構
    CREATE OR REPLACE PROCEDURE 存儲過程名字
    (
        參數1 IN NUMBER,
        參數2 IN NUMBER
    ) IS
    變量1 INTEGER :=0;
    變量2 DATE;
    BEGIN

    END 存儲過程名字

    2.SELECT INTO STATEMENT
      將select查詢的結果存入到變量中,可以同時將多個列存儲多個變量中,必須有一條
      記錄,否則拋出異常(如果沒有記錄拋出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 循環
      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.帶參數的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
      連接數據庫后建立一個Test WINDOW
      在窗口輸入調用SP的代碼,F9開始debug,CTRL+N單步調試

    9、注意事項
     1.在oracle中,數據表別名不能加as,如:

    select a.appname from appinfo a;-- 正確
    select a.appname from appinfo as a;-- 錯誤
     也許,是怕和oracle中的存儲過程中的關鍵字as沖突的問題吧

    2.在存儲過程中,select某一字段時,后面必須緊跟into,如果select整個記錄,利用游標的話就另當別論了。

      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;-- 沒有into,編譯報錯,提示:Compilation 
      Error: PLS-00428: an INTO clause is expected in this SELECT statement

    3.在利用select...into...語法時,必須先確保數據庫中有該條記錄,否則會報出"no data found"異常。

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

    4.在存儲過程中,別名不能和字段名稱相同,否則雖然編譯可以通過,但在運行階段會報錯

     select keynode into kn from APPFOUNDATION where appid=aid and foundationid=fid;-- 正確運行
    select af.keynode into kn from APPFOUNDATION af where af.appid=appid and af.foundationid=foundationid;-- 運行階段報錯,提示
    ORA-01422:exact fetch returns more than requested number of rows

    5.在存儲過程中,關于出現null的問題

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

    6.Hibernate調用oracle存儲過程

            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;
                        }

                    }
    );

    posted on 2008-04-14 15:57 forgood 閱讀(173) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产日韩成人亚洲丁香婷婷| 在线观看免费毛片| 国产啪亚洲国产精品无码| 无套内谢孕妇毛片免费看看| 国产裸模视频免费区无码| 久久亚洲中文无码咪咪爱| 四虎免费永久在线播放| 国产精品亚洲综合一区在线观看| 国产网站免费观看| 精品视频免费在线| 在线精品亚洲一区二区小说| 中文字幕永久免费视频| 久久99国产亚洲精品观看| 91av视频免费在线观看| 亚洲乱码卡一卡二卡三| 国产免费小视频在线观看| 国产男女爽爽爽免费视频| 亚洲电影国产一区| 免费精品国产自产拍在| 国产AV无码专区亚洲AV麻豆丫| 免费中文字幕在线| 中文字幕一区二区免费| 亚洲欧洲综合在线| 国产成人涩涩涩视频在线观看免费 | mm1313亚洲精品国产| jizz免费观看视频| 久久久亚洲AV波多野结衣| 国产精品无码免费播放| 日韩一级片免费观看| 久久久国产精品亚洲一区| 成人免费视频一区二区三区| 无遮挡a级毛片免费看| 亚洲成在人天堂在线| 在线a级毛片免费视频| fc2免费人成在线视频| 亚洲欧洲中文日产| 免费一级毛片在线播放| 日本免费大黄在线观看| 久久无码av亚洲精品色午夜| 日韩亚洲一区二区三区| 日韩电影免费在线|