我目前使用RazorSQL來測試IBM DB2的查詢。現在,我在創建過程中遇到了問題DB2存儲過程返回SQLCODE = -440,SQLSTATE = 42884
我有以下過程。我創建這個程序的呼籲db2inst1
管理員用戶:
CREATE OR REPLACE PROCEDURE CANCEL_ACTIVITY (IN application_handle INTEGER)
LANGUAGE SQL
BEGIN
DECLARE UOW_ID INTEGER;
DECLARE ACTIVITY_ID INTEGER;
FOR v AS cur1 CURSOR FOR
SELECT UOW_ID, ACTIVITY_ID FROM TABLE(SYSPROC.MON_GET_ACTIVITY(application_handle, -1))
DO
CALL WLM_CANCEL_ACTIVITY(application_handle, v.uow_id, v.activity_id);
END FOR ;
END
現在,我登錄到我叫applicationtest
普通用戶是不是管理員。如果我運行以下命令:
CALL CANCEL_ACTIVITY(12345)
我收到以下錯誤:
DB2 SQL Error: SQLCODE=-440, SQLSTATE=42884, SQLERRMC=CANCEL_ACTIVITY;PROCEDURE, DRIVER=4.16.53
據IBM,它是由引起:
NO AUTHORIZED routine-type BY THE NAME routine-name HAVING COMPATIBLE ARGUMENTS WAS FOUND
望着這question,我跑這個調試代碼來檢查用戶是否相同,並且它看起來不是相同的,因爲結果是:
| ROUTINESCHEMA
1 | db2inst1
2 | DB2INST1
邏輯上,ROUTINESCHEMA
應該有我的普通用戶applicationtest
在裏面吧?
我甚至跑了以下內容:
GRANT EXECUTE ON PROCEDURE CANCEL_ACTIVITY TO PUBLIC;
要看看它是否會有所幫助,但儘管如此,同樣的錯誤。
我也嘗試使用applicationtest
創建過程,但正如所料,我沒有這樣做的權限。
編輯:
我剛纔指定DB2INST1.CANCEL_PROCEDURE(12345),現在我收到以下錯誤:
2016-11-18 11:27:34.983 -0800 [ERROR|01c56|] :: Java::ComIbmDb2JccAm::SqlSyntaxErrorException : DB2 SQL Error: SQLCODE=-551, SQLSTATE=42501, SQLERRMC=APPLICATIONTEST;EXECUTE;DB2INST1.CANCEL_ACTIVITY, DRIVER=4.16.53
我猜用戶applicationtest
沒有權限來執行該程序?
我有兩個問題:
是否有可能不具有調用程序之前調用DB2INST1?所以我可以把它叫做
CALL CANCEL_PROCEDURE(..)
而不是CALL DB2INST1.CANCEL_ACTIVITY
。我覺得這樣會消除很多不明確之處。我該如何授予
applicationtest
調用該過程所需的特權?
@angoca嗨!謝謝 - 如果我設置當前路徑,是僅針對當前會話還是當前用戶,還是全局設置?將來,我可以從那以後調用'CALL CANCEL_ACTIVITY()'嗎? – theGreenCabbage
設置路徑的範圍適用於當前會話。每次連接到數據庫時,都需要更改該寄存器。 – AngocA