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

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

存儲(chǔ) 存儲(chǔ)軟件
在利用select...into...語(yǔ)法時(shí),必須先確保數(shù)據(jù)庫(kù)中有該條記錄,否則會(huì)報(bào)出"no data found"異常。可以在該語(yǔ)法之前,先利用select count(*) from 查看數(shù)據(jù)庫(kù)中是否存在該記錄,如果存在,再利用select...into...

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

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

2.SELECT INTO STATEMENT

將select查詢(xún)的結(jié)果存入到變量中,可以同時(shí)將多個(gè)列存儲(chǔ)多個(gè)變量中,必須有一條記錄,否則拋出異常(如果沒(méi)有記錄拋出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ù)庫(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,如:

  1. select a.appname from appinfo a;-- 正確 
  2. 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)別論了。

  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. -- 沒(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ò)

  1. select keynode into kn from APPFOUNDATION  
  2.       where appid=aid and foundationid=fid;-- 正確運(yùn)行 
  3.  
  4.  
  5. select af.keynode into kn from APPFOUNDATION af  
  6.       where af.appid=appid and af.foundationid=foundationid;-- 運(yùn)行階段報(bào)錯(cuò) 

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

 

5.在存儲(chǔ)過(guò)程中,關(guān)于出現(xiàn)null的問(wèn)題

假設(shè)有一個(gè)表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. ); 

如果在存儲(chǔ)過(guò)程中,使用如下語(yǔ)句:

  1. 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)題,所以在這里***先判斷一下:

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

這樣就一切ok了。

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

  1. this.pnumberManager.getHibernateTemplate().execute
  2.                new HibernateCallback() { 
  3.                    public Object doInHibernate(Session session) 
  4.                            throws HibernateException, SQLException { 
  5.                        CallableStatement cs = session 
  6.                                .connection() 
  7.                                .prepareCall("{call modifyapppnumber_remain(?)}"); 
  8.                        cs.setString(1, foundationid); 
  9.                        cs.execute(); 
  10.                        return null
  11.                    } 
  12.                }); 

 

責(zé)任編輯:武曉燕 來(lái)源: 博客園
相關(guān)推薦

2018-08-28 11:40:47

存儲(chǔ)過(guò)程語(yǔ)法

2010-04-16 09:03:28

Oracle 存儲(chǔ)過(guò)程

2011-05-19 14:29:50

Oracle存儲(chǔ)語(yǔ)法

2010-10-29 16:33:45

ORACLE存儲(chǔ)過(guò)程

2010-04-06 10:32:12

Oracle遞歸查詢(xún)

2010-04-16 10:11:20

Oracle存儲(chǔ)過(guò)程

2010-04-07 13:12:25

Oracle存儲(chǔ)過(guò)程

2010-06-01 15:09:55

MySQL 存儲(chǔ)過(guò)程

2010-04-07 12:08:28

Oracle存儲(chǔ)過(guò)程

2010-04-08 16:41:29

Oracle存儲(chǔ)過(guò)程

2010-04-15 17:31:10

Oracle存儲(chǔ)過(guò)程

2010-11-16 14:30:32

Oracle存儲(chǔ)過(guò)程

2010-10-29 16:06:55

Oracle存儲(chǔ)過(guò)程

2010-04-08 18:10:37

Oracle存儲(chǔ)過(guò)程

2010-04-07 14:01:40

Oracle存儲(chǔ)過(guò)程

2010-11-19 11:32:25

Oracle存儲(chǔ)過(guò)程

2011-04-13 09:45:15

Oracle存儲(chǔ)

2011-04-15 10:56:22

2009-03-25 10:48:08

存儲(chǔ)銀行Oracle

2017-09-01 21:25:45

MySQL存儲(chǔ)過(guò)程
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久精品国产久精国产 | www.日本国产 | 成人在线精品 | 亚洲成人黄色 | 午夜欧美一区二区三区在线播放 | 国产高清在线精品一区二区三区 | 欧美日韩中文字幕在线 | 黄色三级在线播放 | 久久成人高清视频 | 成人a视频片观看免费 | 在线观看第一区 | 黄色免费三级 | 奇米av| 亚洲精品日韩在线 | 在线看h| 欧美亚洲视频 | 国产中文在线 | 国产精品18hdxxxⅹ在线 | 久久精品欧美一区二区三区麻豆 | 伦理二区 | 精品美女在线观看视频在线观看 | 亚洲先锋影音 | 成人高清在线视频 | 日韩成人在线观看 | 亚洲免费三级 | 欧美国产91 | 伊人亚洲 | 日本在线免费观看 | 精品一区二区三区免费视频 | 精品一区电影 | 美女视频. | 四虎av电影 | 国产乱码高清区二区三区在线 | 欧美综合视频 | 成人黄在线观看 | www.一区二区三区.com | 亚洲成人久久久 | 成人一级片在线观看 | 天天操天天干天天透 | 欧美精品片 | 国产精品欧美一区二区三区不卡 |