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

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

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

時間:2015-06-28 00:00:00 來源:IT貓撲網 作者:網管聯(lián)盟 我要評論(0)

  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 循環(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.帶參數的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單步調試

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

  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.在存儲過程中,關于出現(xiàn)null的問題

  假設有一個表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定義時設置了默認值,如: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;

  }

  });

關鍵詞標簽:oracle,存儲過程

相關閱讀

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

熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數據庫實例的控制文件 誤刪Oracle數據庫實例的控制文件 為UNIX服務器設置Oracle全文檢索 為UNIX服務器設置Oracle全文檢索

相關下載

    人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數據處理 Oracle刪除表的幾種方法