當前位置:首頁 » 存儲配置 » db2存儲過程異常處理

db2存儲過程異常處理

發布時間: 2022-07-24 16:53:34

A. 我的DB2存儲過程出問題了 現在我想把它還原到前一段時間備份的那個狀態去 但是有這樣一個問題

sqlSTATE=42601
字元、標記或子句無效或丟失
仔細檢查你的語句吧

B. 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.

C. 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)即為受防護用戶的主組

繼而,用戶便可驗證實例用戶是否被加入到了正確的組中,如果結果正確,便可以解決上述問題。

D. 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

E. 在db2中執行存儲過程報了這樣一個錯,望高手指教一下啊。

你調用的存儲過程P_ER_VALUATION啊。。。
先創建該存儲過程,然後再調用它。

F. db2存儲過程執行表和存儲過程就死鎖怎麼處理

1、建議獲取snapshot for application 以及snapshot for locks,應可以確定是哪一句發生了鎖。
2、如果能肯定是這一句,如果可以直接在最後加上 with ur應該就可以了(如果業務邏輯容許的話)。

G. db2 存儲過程中我想獲取異常的sqlcode,該怎麼實現

看個例子
create or replace procere tes as
sqlc integer;
begin
insert into t1 values (1);
sqlc:=sqlcode;
if sqlc=0 then
dbms_output.put_line('成功!');
else
dbms_output.put_line('失敗!');
end if;
end;

H. db2存儲過程怎麼保存運行錯誤詳細信息

如果是在plsql developer中修改的,可以直接點那個齒輪圖標,或者F8即可編譯。 如果是在sqlplus中,那就敲入修改後的過程代碼(create or replace procere...),最後以/結尾運行即可。

I. 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:存儲過程的主體

熱點內容
安卓fc下載游戲在哪個文件夾 發布:2024-10-05 06:51:05 瀏覽:765
演算法狼人殺 發布:2024-10-05 06:50:21 瀏覽:345
ibm伺服器怎麼做raid5 發布:2024-10-05 06:46:20 瀏覽:854
wifi如何換密碼 發布:2024-10-05 06:25:39 瀏覽:548
ubuntu遠程訪問mysql 發布:2024-10-05 06:17:29 瀏覽:222
centos配置後怎麼做 發布:2024-10-05 06:08:59 瀏覽:70
專戶存儲專項核算基建 發布:2024-10-05 05:53:53 瀏覽:145
安卓手機下載app在哪裡 發布:2024-10-05 05:37:39 瀏覽:560
android源代碼情景分析 發布:2024-10-05 05:33:54 瀏覽:828
怎麼讀取伺服器地址文件java 發布:2024-10-05 05:12:21 瀏覽:78