如何在IBM DB2中的另一个存储过程中创建或执行存储过程?

时间:2013-05-22 08:48:57

标签: windows stored-procedures jdbc db2 execute

如何使用IBM DB2 9.7 for Windows中的存储过程创建动态存储过程?

以下示例是我动态生成的存储过程:

CREATE PROCEDURE DB2ADMIN.INSERT_A (inputVar1 Integer, inputVar2 Integer) 
LANGUAGE SQL
BEGIN
INSERT INTO DB2ADMIN.TABLE_A (var1, var2) VALUES (inputVar1, inputVar2);-- 
END;

然后我有执行语句存储过程:

CREATE PROCEDURE ExecuteScript
(
    inputStmt VARCHAR(4000)
)
LANGUAGE SQL
BEGIN   
    DECLARE stmt VARCHAR(4000);--
    SET stmt = inputStmt;--

    PREPARE rs_stmt FROM stmt; --
    EXECUTE rs_stmt;--
END;

最后我调用存储过程如下:

CALL ExecuteScript('CREATE PROCEDURE DB2ADMIN.INSERT_A (inputVar1 Integer, inputVar2 Integer) 
LANGUAGE SQL
BEGIN
INSERT INTO DB2ADMIN.TABLE_A (var1, var2) VALUES (inputVar1, inputVar2);-- 
END;')

当我在DB2 Control Center和JAVA JDBC中调用它时出现以下错误:

com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=LANGUAGE;LANGUAGE SQL;IS, AS, DRIVER=4.14.122

无论如何,是否可以在存储过程中创建存储过程?或者只是使用JDBC for IBM DB2创建它?感谢。

2 个答案:

答案 0 :(得分:1)

CREATE PROCEDURE语句的末尾不应有分号。

答案 1 :(得分:0)

通过阅读后我找到了解决方案: http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frzaha%2Fcallexample3.htm

我需要通过添加EX3来调用存储过程(可以是我想的任何东西):

CALL ExecuteScript('CREATE PROCEDURE DB2ADMIN.INSERT_A (inputVar1 Integer, inputVar2 Integer) 
LANGUAGE SQL
EX3: BEGIN
INSERT INTO DB2ADMIN.TABLE_A (var1, var2) VALUES (inputVar1, inputVar2); 
END EX3')

但我不确定原因。