詳細講解有關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