【问题标题】:How to create or execute a Stored Procedure within another Stored Procedure in IBM DB2?如何在 IBM DB2 的另一个存储过程中创建或执行一个存储过程?
【发布时间】:2013-05-22 08:48:57
【问题描述】:

如何在 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;

然后我就有了execute语句存储过程:

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 控制中心和 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 创建它?谢谢。

【问题讨论】:

    标签: windows stored-procedures jdbc db2 execute


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我在阅读后找到了解决方案: 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')
      

      但我不知道为什么。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-15
      • 2017-06-19
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 2013-10-12
      • 1970-01-01
      相关资源
      最近更新 更多