Sql server 返回SQLCODE=-440、SQLSTATE=42884的DB2存储过程
我目前正在使用RazorSQL测试IBMDB2的查询。现在,我被困在创建过程的问题上 我有以下程序。我以名为Sql server 返回SQLCODE=-440、SQLSTATE=42884的DB2存储过程,sql-server,stored-procedures,db2,Sql Server,Stored Procedures,Db2,我目前正在使用RazorSQL测试IBMDB2的查询。现在,我被困在创建过程的问题上 我有以下程序。我以名为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 C
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)
GRANT EXECUTE ON PROCEDURE CANCEL_ACTIVITY TO PUBLIC;
我得到以下错误:
DB2 SQL Error: SQLCODE=-440, SQLSTATE=42884, SQLERRMC=CANCEL_ACTIVITY;PROCEDURE, DRIVER=4.16.53
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
据调查,这是由以下原因造成的:
找不到名为例程名称且具有兼容参数的授权例程类型
看到这一点,我运行了这个调试代码来检查用户是否相同,并且看起来不一样,因为结果是:
| ROUTINESCHEMA
1 | db2inst1
2 | DB2INST1
从逻辑上讲,ROUTINESCHEMA
应该包含我的常规用户applicationtest
,对吗
我甚至运行了以下程序:
CALL CANCEL_ACTIVITY(12345)
GRANT EXECUTE ON PROCEDURE CANCEL_ACTIVITY TO PUBLIC;
看看这是否有帮助,但仍然是同样的错误
我还尝试使用applicationtest
创建过程,但正如预期的那样,我没有这样做所需的特权
编辑:
我刚刚指定了DB2INST1.CANCEL_过程(12345),现在我得到了以下错误:
DB2 SQL Error: SQLCODE=-440, SQLSTATE=42884, SQLERRMC=CANCEL_ACTIVITY;PROCEDURE, DRIVER=4.16.53
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
没有执行该过程的权限
我有两个问题:
applicationtest
调用过程所需的特权这里有两个问题:
- 将架构设置为db2inst1:
- 使用schema.name:db2inst1.cancel\u活动调用存储过程
- 设置路径,包括其上的db2inst1:
这里有两个问题:
- 将架构设置为db2inst1:
- 使用schema.name:db2inst1.cancel\u活动调用存储过程
- 设置路径,包括其上的db2inst1:
嗨,安哥卡!谢谢--如果我设置了当前路径,那么它是仅针对当前会话和当前用户,还是全局设置的?将来,我是否可以从那时起调用
call CANCEL\u ACTIVITY()
?设置路径的范围是针对当前会话的。每次连接到数据库时,都需要更改该寄存器。使用schema.name调用存储过程解决了我的问题。ThxHi@angoca!谢谢--如果我设置了当前路径,那么它是仅针对当前会话和当前用户,还是全局设置的?将来,我是否可以从那时起调用call CANCEL\u ACTIVITY()
?设置路径的范围是针对当前会话的。每次连接到数据库时,都需要更改该寄存器。使用schema.name调用存储过程解决了我的问题。谢谢