創建或替換過程存儲過程的名稱。
(
數字參數
數字參數
)是
可變整數:=;
可變日期;
開始
結束存儲過程名
SELECT INTO語句
將select查詢的結果存儲到變量中可以同時存儲多個列,並且多個變量中必須有壹個。
記錄或拋出壹個異常(如果沒有記錄,拋出NO_DATA_FOUND)
例子
開始
從typestruct中選擇colcollinto變量variable,其中xxx
例外
當沒有找到數據時
xxxx
結束;
如果判斷
如果V_TEST=那麽
開始
做某事
結束;
結束IF;
While循環
WHILE V_TEST= LOOP
開始
XXXX
結束;
結束循環;
變量賦值
v _ TEST:=;
在中使用遊標和for
是
光標cur是SELECT * FROM xxx
開始
對於曲線循環中的cur_result
開始
V_SUM :=cur_result列名+cur_result列名。
結束;
結束循環;
結束;
帶參數的光標
遊標C_USER(C_ID NUMBER)是從用戶中選擇的名稱,其中TYPEID = C _ ID
OPEN C_USER(變量值);
環
將C_USER提取到V_NAME中;
退出FETCH C _ USER % NOTFOUND
做某事
結束循環;
關閉C _ USER
使用pl/SQL developer進行調試
連接到數據庫後,建立壹個測試窗口。
在窗口中輸入調用SP的代碼f開始調試CTRL+N單步調試。
關於oracle存儲過程的壹些備忘錄
在oracle中,數據表別名不能這樣添加。
從appinfo a中選擇壹個appname正確的
從appinfo中選擇壹個appname作為;錯誤
可能是怕和oracle中的存儲過程壹樣和關鍵字沖突吧。
當在存儲過程中選擇壹個字段時,它必須後跟into,如果使用遊標選擇整個記錄,則另當別論。
從APPFOUNDATION af中選擇af keynode到kn中,其中af appid=aid,af foundationid = fid已經正確編譯成。
從APPFOUNDATION af中選擇af keynode,其中af appid=aid,af foundationid = fid沒有進入編譯錯誤提示編譯
錯誤:PLS:此SELECT語句中應該有INTO子句
當使用select into語法時,您必須首先確保數據庫中存在該記錄,否則您將報告壹個no data found異常。
您可以在語法之前使用select count(*) from檢查記錄是否存在於數據庫中,如果存在,則使用select into。
在存儲過程中,別名不能與字段名相同,否則,雖然編譯可以通過,但在運行時會報告錯誤。
從APPFOUNDATION中選擇keynode到kn中,其中appid=aid,foundationid = fid真實運行
從APPFOUNDATION af中選擇af keynode到kn中,其中af appid=appid,af foundationid = foundationid運行時錯誤提示
ORA:精確提取返回的行數超過了請求的行數
存儲過程中的空問題
假設有壹個定義如下的表A
創建表A(
id varchar()主鍵不為空
vcount number()不為空
Bid varchar()非空外鍵
);
如果在存儲過程中使用以下語句。
select sum(vcount)into fcount from A where bid = XXXXXX;
如果表A中沒有bid= xxxxxx的記錄,fcount=null(即使定義fcount時設置了fcount number (): =等默認值,仍然會變成null),那麽以後使用fcount時可能會出現問題,所以這裏最好先判斷壹下。
如果fcount為空,則
fcount:=;
結束if;
所以壹切都好。
Hibernate調用oracle存儲過程
這個pnumberManager getHibernateTemplate()執行(
新HibernateCallback() {
公共對象doInHibernate(會話Session)
引發hibernate exception SQLException {
可調用語句cs =會話
連接()
prepare call({ call modifyapppnumber _ remain(?)} );
cs setString(foundation id);
cs execute();
返回null
}
Lishi Xinzhi/Article/program/Oracle/201311/16725