【发布时间】:2017-04-02 17:43:06
【问题描述】:
我目前正在使用 RazorSQL 来测试 IBM DB2 的查询。现在,我遇到了创建程序的问题
我有以下程序。我以管理员用户身份创建此过程,名为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,是由于:
没有通过名称获得授权的例程类型例程名称有兼容的参数被发现
看着这个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调用过程所需的权限?
【问题讨论】:
标签: sql-server stored-procedures db2