IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當前所在位置:首頁數(shù)據(jù)庫Oracle → oracle存儲過程的基本語法及注意事項

oracle存儲過程的基本語法及注意事項

時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)

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

  CREATE OR REPLACE PROCEDURE 存儲過程名字

  (

  參數(shù)1 IN NUMBER,

  參數(shù)2 IN NUMBER

  ) IS

  變量1 INTEGER :=0;

  變量2 DATE;

  BEGIN

  END 存儲過程名字

  2.SELECT INTO STATEMENT

  將select查詢的結(jié)果存入到變量中,可以同時將多個列存儲多個變量中,必須有一條

  記錄,否則拋出異常(如果沒有記錄拋出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ù)庫后建立一個Test WINDOW

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

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

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

  select a.appname from appinfo a;-- 正確

  select a.appname from appinfo as a;-- 錯誤

  也許,是怕和oracle中的存儲過程中的關(guān)鍵字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...語法時,必須先確保數(shù)據(jù)庫中有該條記錄,否則會報出"no data found"異常。

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

  假設(shè)有一個表A,定義如下:

  create table A(

  id varchar2(50) primary key not null,

  vcount number(8) not null,

  bid varchar2(50) not null -- 外鍵

  );

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

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

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

  if fcount is null then

  fcount:=0;

  end if;

  這樣就一切ok了。

  6.Hibernate調(diào)用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;

  }

  });

關(guān)鍵詞標簽:oracle,存儲過程

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 Oracle中使用alter table來增加,刪除,修改列Oracle中使用alter table來增加,刪除,修改列oracle中使用SQL語句修改字段類型-oracle修oracle中使用SQL語句修改字段類型-oracle修使用低權(quán)限Oracle數(shù)據(jù)庫賬戶得到管理員權(quán)限使用低權(quán)限Oracle數(shù)據(jù)庫賬戶得到管理員權(quán)限Oracle對user的訪問控制Oracle對user的訪問控制

相關(guān)下載

人氣排行 ORACLE SQL 判斷字符串是否為數(shù)字的語句Oracle中使用alter table來增加,刪除,修改列的語法ORACLE和SQL語法區(qū)別歸納(1)oracle grant 授權(quán)語句如何加速Oracle大批量數(shù)據(jù)處理Oracle刪除表的幾種方法ORACLE修改IP地址后如何能夠使用Oracle 10g創(chuàng)建表空間和用戶并指定權(quán)限