熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

有關Oracle存儲過程的相關問題

2013-11-13 16:01:25  來源: Oracle 

  詳細講解有關Oracle存儲過程的相關問題

  在Oracle數據庫中數據表別名是不能加as的例如

  select aappname from appinfo a—— 正確

  select aappname from appinfo as a—— 錯誤

  注釋這可能是為了防止和Oracle數據庫中的存儲過程中的關鍵字as沖突的問題

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

  

  select afkeynode into kn from APPFOUNDATION af where afappid=aid and affoundationid=fid; 有into正確編譯 select afkeynode from APPFOUNDATION af where afappid=aid and affoundationid=fid; 沒有into編譯報錯提示Compilation Error: PLS: an INTO clause is expected in this SELECT statement

  在我們利用select……into……語法時必須先確保數據庫中有該條記錄否則會報出no data found異常

  可以在該語法之前先利用select count(*) from 查看數據庫中是否存在該記錄如果存在再利用select……into……

  請注意在存儲過程中別名不能和字段名稱相同否則雖然編譯可以通過但在運行的階段會報錯

  

  select keynode into kn from APPFOUNDATION where appid=aid and foundationid=fid; 正確運行 select afkeynode into kn from APPFOUNDATION af where afappid=appid and affoundationid=foundationid; 運行階段報錯提示 ORA:exact fetch returns more than requested number of rows

  在存儲過程中關於出現null的問題

  假如有一個表X定義如下

   create table X(
id varchar() primary key not null
vcount number() not null
bid varchar() not null 外鍵
);

  假如在存儲過程中使用如下語句

  select sum(vcount) into fcount from X where bid=xxxxxx如果X表中不存在bid=xxxxxx的記錄則fcount=null(即使fcount定義時設置了默認值例如fcount number(=依然無效fcount還是會變成null)這樣以後使用fcount時就可能會出現問題所以在這裡我們最好先判斷一下

  

  if fcount is null then fcount:=; end if;

  Hibernate調用Oracle的存儲過程

  

  thispnumberManagergetHibernateTemplate()execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException SQLException { CallableStatement cs = nnection() prepareCall({call modifyapppnumber_remain(?)}); cssetString( foundationid); csexecute(); return null; } });


From:http://tw.wingwit.com/Article/program/Oracle/201311/17685.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.