自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle 存儲過程的基本語法

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

 1.基本結(jié)構(gòu)

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

[[241739]]

2.SELECT INTO STATEMENT

將select查詢的結(jié)果存入到變量中,可以同時將多個列存儲多個變量中,必須有一條記錄,否則拋出異常(如果沒有記錄拋出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 循環(huán)

  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.帶參數(shù)的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

連接數(shù)據(jù)庫后建立一個Test WINDOW

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

關(guān)于oracle存儲過程的若干問題備忘

1.在oracle中,數(shù)據(jù)表別名不能加as,如:

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

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

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

  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...語法時,必須先確保數(shù)據(jù)庫中有該條記錄,否則會報出"no data found"異常。

可以在該語法之前,先利用select count(*) from 查看數(shù)據(jù)庫中是否存在該記錄,如果存在,再利用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.在存儲過程中,關(guān)于出現(xiàn)null的問題

假設(shè)有一個表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定義時設(shè)置了默認(rèn)值,如:fcount number(8):=0依然無效,fcount還是會變成null),這樣以后使用fcount時就可能有問題,所以在這里***先判斷一下:

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

這樣就一切ok了。

6.Hibernate調(diào)用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.   
責(zé)任編輯:武曉燕 來源: 后端技術(shù)精選
相關(guān)推薦

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-15 17:31:10

Oracle存儲過程

2010-10-29 16:06:55

Oracle存儲過程

2010-04-08 16:41:29

Oracle存儲過程

2010-11-16 14:30:32

Oracle存儲過程

2010-04-08 18:10:37

Oracle存儲過程

2010-04-07 14:01:40

Oracle存儲過程

2017-09-01 21:25:45

MySQL存儲過程

2010-11-19 11:32:25

Oracle存儲過程

2011-04-15 10:56:22

2011-04-13 09:45:15

Oracle存儲

2009-03-25 10:48:08

存儲銀行Oracle
點贊
收藏

51CTO技術(shù)棧公眾號