db2v71存儲過程報錯
A. DB2資料庫 寫了一個循環插數的存儲過程,但是報錯,不清楚是為什麼,請高手指導。
sql">begin
foriin2..1000
loop
insertintotvalues(i,'x');
endloop;
commit;
end;
B. db2創建存儲過程報錯
首先第一個錯誤,分號,應該是英文分號; 而不是中文;
C. db2的存儲過程報TB_NAME" 是一個未定義的名稱。. SQLCODE=-204, SQLSTATE=42704, DRIVER=3.50.152
你到這個db庫去櫻辯中查詢下是否有這個庫,你向裡面脊山插灶困入條數據看看,如果可以,你看下你這個存儲過程語句是不是寫的有問題亞!
D. 調用db2存儲過程的時候報錯報錯
declare 出參變數1 ...; 出參變數2...; .....; 出參變數N...;begin 過程(入參1,入參2,...,入參N,出參1,出參2,...,出參N);end;/
E. db2 調用存儲過程,報錯:SQL1646N 無法訪問sqllib
幫一下包試試?
db2 terminate
db2 CONNECT TO dbname user USERID using PASSWORD
db2 BIND path\db2schema.bnd BLOCKING ALL GRANT PUBLIC SQLERROR CONTINUE
db2 BIND path\@db2ubind.lst BLOCKING ALL GRANT PUBLIC ACTION ADD
db2 BIND path\@db2cli.lst BLOCKING ALL GRANT PUBLIC ACTION ADD
db2 terminate
where dbname represents the name of a database to which the files should be bound, and where path is the full path name of the directory where the bind files are located, such as INSTHOME\sqllib\bnd where INSTHOME represents the home directory of the DB2 instance. db2ubind.lst and db2cli.lst contain lists of required bind files used by DB2 database procts. Packages that are already bound will return an SQL0719N error. This is expected.
F. db2 用 toad 創建存儲過程 報錯
在toad的左邊窗口中找到存儲過程標簽,選中存儲過程,然後右鍵--execute procere。 會彈出仿信窗口,輸入參數,就可以調試備笑輪存儲過程的升仿。
G. db2 存儲過程 異常處理
存儲過程異常的處理:
DECLARE handler-type HANDLER FOR condition handler-action
異常處理器類型(handler-type)有以下幾種:
CONTINUE 在處理器操作完成之後,會繼續執行產生這個異常語句之後的下一條語句。
EXIT 在處理器操作完成之後,存儲過程會終止,並將控制返回給調用者。
UNDO 在處理器操作執行之前,DB2會回滾存儲過程中執行的SQL操作。在處理器操作完成之後,存儲過程會終止,並將控制返回給調用者。
異常處理器可以處理基於特定SQLSTATE值的定製異常,或者處理預定義異常的類。預定義的3種異常如下所示:
NOT FOUND 標識導致SQLCODE值為+100或者SQLSATE值為02000的異常。這個異常通常在SELECT沒有返回行的時候出現。
SQLEXCEPTIOIN 標識導致SQLCODE值為負的異常。
SQLWARNING 標識導致警告異常或者導致+100以外的SQLCODE正值的異常。
如果產生了NOT FOUND 或者SQLWARNING異常,並且沒有為這個異常定義異常處理器,那麼就會忽略這個異常,並且將控制流轉向下一個語句。如果產生了SQLEXCEPTION異常,並且沒有為這個異常定義異常處理器,那麼存儲過程就會失敗,並且會將控制流返回調用者。
以下示例聲明了兩個異常處理器。 EXIT處理器會在出現SQLEXCEPTION 或者SQLWARNING異常的時候被調用。EXIT處理器會在終止SQL程序之前,將名為stmt的變數設為"ABORTED",並且將控制流返回給調用者。UNDO處理器會將控制流返回給調用者之前,回滾存儲過程體中已經完成的SQL操作。
清單3:異常處理器示例
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING SET stmt = 'ABORTED';
DECLARE UNDO HANDLER FOR NOT FOUND;
如果預定義異常集不能滿足需求,就可以為特定的SQLSTATE值聲明定製異常,然後再為這個定製異常聲明處理器。語法如下:
清單4:定製異常處理器
DECLARE unique-name CONDITION FOR SQLSATE 'sqlstate'
處理器可以由單獨的存儲過程語句定義,也可以使用由BEGIN…END塊界定的復合語句定義。注意在執行符合語句的時候,SQLSATE和SQLCODE的值會被改變,如果需要保留異常前的SQLSATE和SQLCODE,就需要在執行復合語句的第一個語句把SQLSATE和SQLCODE賦予本地變數或參數。
通常,會為存儲過程定義一個執行狀態的輸出參數(例如:poGenStatus)。
declare sqlcode integer default 0;
begin
declare continue handler for sqlexception set ret = sqlcode;
declare continue handler for sqlwarning set ret = sqlcode;
declare continue handler for not found set ret = sqlcode;
end ; --異常的聲明
--異常的處理
if sqlcode< 0 or sqlcode= 100 then
set O_RetCod = RetCode;
set O_RetMsg = 'CLN02:產品實例關聯客戶過程出錯!';
insert into LOG.OPER_LOG_TAB(PROC_NAME,OBJ_TAB,REGION_COD,OPER_COUNT,ERR_CODE,DATA_TIME,OPER_TIME)
values('P_DW_CLEAN','GLOBAL TEMP',0,0,retcode,CHAR(last_3_mon_time),current TIMESTAMP);
return;
else
set RetCode = 0;
end if;
H. 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(參數,參數,參數)});
I. db2如何捕獲存儲過程異常
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