成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle 存儲過程的基本語法

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

 1.基本結構

  1. CREATE OR REPLACE PROCEDURE 存儲過程名字 
  2.    參數1 IN NUMBER, 
  3.    參數2 IN NUMBER 
  4. IS 
  5. 變量1 INTEGER :=0; 
  6. 變量2 DATE
  7. BEGIN 
  8.  
  9. END 存儲過程名字 

[[241739]]

2.SELECT INTO STATEMENT

將select查詢的結果存入到變量中,可以同時將多個列存儲多個變量中,必須有一條記錄,否則拋出異常(如果沒有記錄拋出NO_DATA_FOUND)

例子: 

  1. BEGIN 
  2.  SELECT col1,col2 into 變量1,變量2 FROM typestruct where xxx; 
  3.  EXCEPTION 
  4.  WHEN NO_DATA_FOUND THEN 
  5.      xxxx; 
  6.  END
  7.  ... 

3.IF 判斷

  1. IF V_TEST=1 THEN 
  2.    BEGIN  
  3.       do something 
  4.    END
  5.  END IF; 

4.while 循環

  1. WHILE V_TEST=1 LOOP 
  2.  BEGIN 
  3. XXXX 
  4.  END
  5.  END LOOP; 

5.變量賦值

  1. V_TEST := 123; 

6.用for in 使用cursor

  1. ... 
  2.  IS 
  3.  CURSOR cur IS SELECT * FROM xxx; 
  4.  BEGIN 
  5. FOR cur_result in cur LOOP 
  6.  BEGIN 
  7.   V_SUM :=cur_result.列名1+cur_result.列名2 
  8.  END
  9. END LOOP; 
  10.  END

7.帶參數的cursor

  1. CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID; 
  2.  OPEN C_USER(變量值); 
  3.  LOOP 
  4. FETCH C_USER INTO V_NAME; 
  5. EXIT FETCH C_USER%NOTFOUND; 
  6.    do something 
  7.  END LOOP; 
  8.  CLOSE C_USER; 

8.用pl/sql developer debug

連接數據庫后建立一個Test WINDOW

在窗口輸入調用SP的代碼,F9開始debug,CTRL+N單步調試

關于oracle存儲過程的若干問題備忘

1.在oracle中,數據表別名不能加as,如:

  1. select a.appname from appinfo a;-- 正確 
  2. select a.appname from appinfo as a;-- 錯誤 

也許,是怕和oracle中的存儲過程中的關鍵字as沖突的問題吧

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

  1. select af.keynode into kn from APPFOUNDATION af where af.appid=aid and af.foundationid=fid; 
  2. -- 有into,正確編譯 
  3.  
  4. select af.keynode from APPFOUNDATION af where af.appid=aid and af.foundationid=fid; 
  5. -- 沒有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.在存儲過程中,別名不能和字段名稱相同,否則雖然編譯可以通過,但在運行階段會報錯

  1. select keynode into kn from APPFOUNDATION  
  2.       where appid=aid and foundationid=fid;-- 正確運行 
  3.  
  4.  
  5. select af.keynode into kn from APPFOUNDATION af  
  6.       where af.appid=appid and af.foundationid=foundationid;-- 運行階段報錯 

提示:ORA-01422:exact fetch returns more than requested number of rows

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

假設有一個表A,定義如下:

  1. create table A( 
  2. id varchar2(50) primary key not null
  3. vcount number(8) not null
  4. bid varchar2(50) not null -- 外鍵  
  5. ); 

如果在存儲過程中,使用如下語句:

  1. select sum(vcount) into fcount from A where bid='xxxxxx'

如果A表中不存在bid="xxxxxx"的記錄,則fcount=null(即使fcount定義時設置了默認值,如:fcount number(8):=0依然無效,fcount還是會變成null),這樣以后使用fcount時就可能有問題,所以在這里***先判斷一下:

  1. if fcount is null then 
  2.    fcount:=0; 
  3. end if; 

這樣就一切ok了。

6.Hibernate調用oracle存儲過程

  1. this.pnumberManager.getHibernateTemplate().execute
  2.  
  3.                new HibernateCallback() { 
  4.  
  5.                    public Object doInHibernate(Session session) 
  6.  
  7.                            throws HibernateException, SQLException { 
  8.  
  9.                        CallableStatement cs = session 
  10.  
  11.                                .connection() 
  12.  
  13.                                .prepareCall("{call modifyapppnumber_remain(?)}"); 
  14.  
  15.                        cs.setString(1, foundationid); 
  16.  
  17.                        cs.execute(); 
  18.  
  19.                        return null
  20.  
  21.                    } 
  22.  
  23.                }); 
  24.  
  25.   
責任編輯:武曉燕 來源: 后端技術精選
相關推薦

2018-10-12 11:26:13

oracle存儲語法

2010-04-16 09:03:28

Oracle 存儲過程

2011-05-19 14:29:50

Oracle存儲語法

2010-10-29 16:33:45

ORACLE存儲過程

2010-04-06 10:32:12

Oracle遞歸查詢

2010-04-16 10:11:20

Oracle存儲過程

2010-04-07 13:12:25

Oracle存儲過程

2010-06-01 15:09:55

MySQL 存儲過程

2010-04-07 12:08:28

Oracle存儲過程

2010-04-08 16:41:29

Oracle存儲過程

2010-04-15 17:31:10

Oracle存儲過程

2010-11-16 14:30:32

Oracle存儲過程

2010-10-29 16:06:55

Oracle存儲過程

2010-04-08 18:10:37

Oracle存儲過程

2010-04-07 14:01:40

Oracle存儲過程

2010-11-19 11:32:25

Oracle存儲過程

2017-09-01 21:25:45

MySQL存儲過程

2011-04-13 09:45:15

Oracle存儲

2011-04-15 10:56:22

2009-03-25 10:48:08

存儲銀行Oracle
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: cao在线| 羞羞视频免费在线观看 | 午夜资源| 国内精品视频一区二区三区 | 日韩成人专区 | 日韩一区二区在线免费观看 | 精品视频一区二区三区在线观看 | 四虎永久在线精品免费一区二 | 精品乱码一区二区 | 久久精品无码一区二区三区 | 永久免费在线观看 | 亚州av在线 | 99精品国自产在线 | 青青草视频网站 | 久久久网| 成年网站在线观看 | 日韩欧美中文字幕在线观看 | 国产精品v| 欧美久久久久 | 亚洲国产一区视频 | 亚洲精品久久久久久久不卡四虎 | 毛片一区二区三区 | 激情五月婷婷在线 | 99热成人在线| 中文字幕亚洲一区二区三区 | 久久久激情视频 | 一区二区三区四区电影视频在线观看 | 视频一区二区在线观看 | 国产成人免费 | 男人久久天堂 | 国产免费又黄又爽又刺激蜜月al | 黄色大片网 | 综合九九 | 日韩在线观看视频一区 | 2019天天干夜夜操 | 91久久久久久久久久久 | 成人精品视频在线观看 | 久久国产精品视频 | 亚洲视频一区在线观看 | 中文字幕一区二区三区四区五区 | 狠狠色综合久久丁香婷婷 |