db2存儲過程異常
❶ 調用db2存儲過程的時候報錯報錯
declare 出參變數1 ...; 出參變數2...; .....; 出參變數N...;begin 過程(入參1,入參2,...,入參N,出參1,出參2,...,出參N);end;/
❷ db2 用 toad 創建存儲過程 報錯
在toad的左邊窗口中找到存儲過程標簽,選中存儲過程,然後右鍵--execute procere。 會彈出仿信窗口,輸入參數,就可以調試備笑輪存儲過程的升仿。
❸ db2如何捕獲存儲過程異常
sql">TRUNCATETABLEoutput_debugIMMEDIATE@
BEGIN
--DB2中,如果需要使用sqlcode,那麼必須先DECLARE以後,才能使用。
DECLAREsqlcodeINT;
P1:BEGINATOMIC
--定義錯誤處理
--如果發生錯誤,結束處理,並回滾前面做的處理。
DECLAREUNDOHANDLER
FOR
SQLEXCEPTION
BEGIN
--異常處理
INSERTINTOoutput_debugVALUES('出錯啦!'||TO_CHAR(sqlcode));
END;
--先更新.
UPDATEtest_mainSETvalue='Test3'WHEREid=1;
--插入一行主鍵重復數據.
INSERTINTOtest_mainVALUES(1,'PK');
INSERTINTOoutput_debugVALUES('本語句不會執行到!');
ENDP1;
END
@
db2=>select*fromtest_mainWHEREid=1@
IDVALUE
---------------------
1Test2
1條記錄已選擇。
db2=>select*fromoutput_debug@
DATA
----------------------------------------
出錯啦!-803
❹ db2的存儲過程報TB_NAME" 是一個未定義的名稱。. SQLCODE=-204, SQLSTATE=42704, DRIVER=3.50.152
你到這個db庫去櫻辯中查詢下是否有這個庫,你向裡面脊山插灶困入條數據看看,如果可以,你看下你這個存儲過程語句是不是寫的有問題亞!
❺ db2創建存儲過程在begin和end中間有東西就報錯是什麼情況
因為在 Unix 平台下的 DB2 存儲過程對於實例用戶和受防護用戶之間的關系有一個約束,即 DB2 實例用戶必須同時是受防護用戶的主組中的一個用戶。
上述問題的發生就是由於在系統上,實例用戶未加入至受防護用戶的主組中,從而引發了存取許可權不夠的問題所導致的,而並非真的發生了如日誌中所報的磁碟錯誤。解決這一問題的方法很簡單,只要將實例用戶加入該主組即可。
但有時用戶會發現,即使已將用戶加入到指定組,問題仍然存在,這時還應檢查一下實例用戶所加入的組是否是實例用戶所對應的受防護用戶的主組,即檢查一下加入的組是否正確。
要找到實例用戶所應的受防護用戶以及受防護用戶的主組,可用如下方法:
轉入實例用戶 Home 路徑下的 sqllib/adm 路徑。
執行命令:ls -l .fenced,會得到類似如下輸出。
r--r--r-- 1 db2fencj db2fgrp2 0 Jul 30 09:57 .fenced。
輸出中表明,該文件所屬的用戶(db2fencj)即為受防護用戶,所屬的組(db2fgrp2)即為受防護用戶的主組
繼而,用戶便可驗證實例用戶是否被加入到了正確的組中,如果結果正確,便可以解決上述問題。
❻ db2創建存儲過程報錯
首先第一個錯誤,分號,應該是英文分號; 而不是中文;
❼ db2 執行存儲過程時報「SQL0572N 程序包 不起作用」
DB2 存儲過程執行報錯懸賞分:10 - 提問時間2010-3-22 15:35 問題為何被關閉 SQL0257N 程序包"MYPROJECT.P6482003"不起作用。
❽ db2的過程中怎樣寫異常處理
創建SQL存儲過程(CREATEPROCEDURE(SQL)statement)
CREATEPROCEDUREprocere-name(IN|OUT|INOUTparameter-namedata-type,...))---存儲過程可以設定輸入參數和輸出參數
LANGUAGESQL----DB2可以用多種語言編寫存儲過程,這里用的是純SQL
BEGIN---開始
DECLAREvIDsmallint;---定義變數和Oracle一樣DECLARE變數名變數的數據類型;
FORVASSELECTBRND_CDFROMTMP_BRND_CD---for循環tmp_brnd_cd預先創建好
DO---循環體開始
SETvID=BRND_CD;---對vID賦值,db2可以用set賦值,也可以用values賦值,這里可以寫成values(BRND_CD)intovID
INSERTINTOWWM_FORINSERT_TESTVALUES(vID);---往wwm_forinsert_test插入數據
ENDFOR;-----循環體結束
END@-----存儲過程結束
參數語法說明
1、procere-name:存儲過程的名字,在同一個資料庫的同一模式下,不能存在存儲過程名相同參數數目相同的存儲過程,即使參數的類型不同也不行。
2、(IN|OUT|INOUTparameter-namedata-type,...):傳入參數IN:輸入參數OUT:輸出參數INOUT:作為輸入輸出參數parameter-name:參數名字,在此存儲過程中唯一的標識符。data-type:參數類型,可以接收SQL類型和創建的表。不支持LONGVARCHAR,LONGVARGRAPHIC,DATALINK,REFERENCE和用戶自定義類型。
3、SPECIFICspecific-name:唯一的特定名稱(別名),可以用存儲過程名代替,這個特定名稱用於dorp存儲過程,或者給存儲過程添加註視用,但不能調用存儲過程。如果不指定,則資料庫會自動生成一個yymmddhhmmsshhn時間戳的名字。推薦給出別名。
4、DYNAMICRESULTSETSinteger:指定存儲過程返回結果的最大數量。存儲過程中雖然沒有return語句,但是卻能返回結果集。
5、CONTAINSSQL,READSSQLDATA,MODIFIESSQLDATA:指定存儲過程中的SQL訪問級別CONTAINSSQL:表示存儲過程可以執行中,既不可讀取SQL數據,也不可修改SQL數據。READSSQLDATA:表示存儲過程可以執行中,可讀取SQL,但不可修改SQL數據。MODIFIESSQLDATA:表示存儲過程可以執行任何SQL語句。可以對資料庫中的數據進行增加、刪除和修改。
6、:表示存儲過程是動態或者非動態的。動態的返回的值是不確定的。非動態的存儲過程每次執行返回的值是相同的。
7、CALLEDONNULLINPUT:表示可以調用存儲過程而不管任何的輸入參數是否為NULL,並且,任何的OUT或者INOUT參數可以返回一個NULL或者非空值。檢驗參數是否為NULL是在過程中進行的。
8、INHERITSPECIALREGISTERS:表示繼承專用寄存器。
9、:建立存儲點。OLDSAVEPOINTLEVEL是默認的存儲點。
10、LANGUAGESQL:指定程序的主體用的是SQL語言。
11、:表示存儲過程是否執行一些改變理資料庫狀態的活動,而不通過資料庫管理器管。默認是EXTERNALACTION。如果指定為NOEXTERNALACTION,則資料庫會確定最最佳優化方案。
12、PARAMETERCCSID:指定所有輸出字元串數據的編碼,默認為UNICODE編碼資料庫為PARAMETERCCSIDUNICODE,其他的資料庫默認為PARAMETERCCSID3ASCII。
13、SQL-procere-body:存儲過程的主體
❾ db2資料庫調用存儲過程不成功no authorized routine named
1.連接(與沒野則資料庫建立連脊禪接)
Class.forName(COM.ibm.db2.jdbc.net.DB2Driver).newInstance();
Connection con=DriverManager.getConnection(url,user,password);
2.注冊輸出參數
cs.registerOutParameter (3, Types.INTEGER);
3.調枯棚用存儲過程:
CallableStatement cs=con.prepareCall({call store_name(參數,參數,參數)});
❿ JDBCTEMPLATE 調用db2存儲過程異常
No statement specified