Stored procedures 如何使用原始SQL(LINQPad)调用DB2中的存储过程

Stored procedures 如何使用原始SQL(LINQPad)调用DB2中的存储过程,stored-procedures,db2,output-parameter,Stored Procedures,Db2,Output Parameter,我有一个名为myu-stored\u-PROC的存储过程。它有一个整数输入参数和一个整数输出参数 我已经尝试了各种方式的DECLAREs、BEGINs和ENDs和calls,并且我已经开始研究如何更改语句终止符(??),我一生都无法让它在原始SQL中工作(在我的例子中是LINQPad) 给予 声明输出参数编号; 开始 TP.MY_storaged_PROC(26431414,输出参数); 结束; 返回 错误[42601][IBM][DB2/SUN64]SQL0104N意外标记“DECLARE

我有一个名为
myu-stored\u-PROC
的存储过程。它有一个整数输入参数和一个整数输出参数

我已经尝试了各种方式的
DECLARE
s、
BEGIN
s和
END
s和
call
s,并且我已经开始研究如何更改语句终止符(??),我一生都无法让它在原始SQL中工作(在我的例子中是LINQPad)

给予

声明输出参数编号;
开始
TP.MY_storaged_PROC(26431414,输出参数);
结束;
返回

错误[42601][IBM][DB2/SUN64]SQL0104N意外标记“DECLARE OUTPARAM NUMBER@ BEGIN“在以下位置找到” “。预期的令牌可能包括:“

我还尝试设置终止符/延迟计:

--#SET DELIMITER @
DECLARE outParam NUMBER@
BEGIN
    TP.MY_STORED_PROC(26431414, outParam);
END@

--#SET TERMINATOR @
DECLARE outParam NUMBER@
BEGIN
    TP.MY_STORED_PROC(26431414, outParam);
END@
两者都返回

错误[42601][IBM][DB2/SUN64]SQL0104N意外标记“DECLARE OUTPARAM NUMBER@ BEGIN“在以下位置找到” “。预期的令牌可能包括:“

call
给出了相同的结果

通过
OdbcCommand
调用它可以与
call
配合使用:

var输入=789;
var sql=“调用TP.MY_STORED_PROC(?,);”;
使用(var tx=新TransactionScope(TransactionScopeOption.Suppress))
使用(var连接=新OdbcConnection(ConfigurationManager.ConnectionString[“MyConnectionString”].ConnectionString))
使用(var命令=新OdbcCommand(sql,连接))
{
command.Parameters.Add(“@input\u param”,OdbcType.Int,32).Value=input;
Add(“@output_param”,OdbcType.Int,32).Direction=System.Data.ParameterDirection.output;
connection.Open();
command.ExecuteNonQuery();
对象输出=命令.参数[“@output\u param”].值;
if(输出为DBNull)
返回null;
int-output=Convert.ToInt32(输出);
返回输出;
}

我如何调用这个函数并在输出参数中获得有意义的结果,然后将其放入结果集中并返回到屏幕?

如果您只是试图从DB2命令行处理器调用存储过程,则不需要做任何花哨的事。只需对任何输出参数使用参数标记:

$ db2 "call tp.my_stored_proc(26431414, ?)"
DB2CLP将只打印每个输出参数的名称/值

例如,内置的
GET\u DBSIZE\u INFO
存储过程有3个输出参数。你这样称呼它:

$ db2 "call get_dbsize_info(?, ?, ?, -1)"

  Value of output parameters
  --------------------------
  Parameter Name  : SNAPSHOTTIMESTAMP
  Parameter Value : 2013-05-06-23.49.14.581776

  Parameter Name  : DATABASESIZE
  Parameter Value : 253607936

  Parameter Name  : DATABASECAPACITY
  Parameter Value : 2179940352

  Return Status = 0

谢谢你的意见。不完全是我想要的。我的问题更多的是“我如何在SQL脚本中运行这个存储过程
get_dbsize\u info(?,,?,-1)
,类似于我可以运行
ALTER TABLE TESTUSER.EMPLOYEE ADD NEW_COL VARCHAR(25)
”想想数据库升级脚本(通过RoundhousE或类似的方式)。我不熟悉Roundhouse如何执行SQL语句,即它是直接连接到数据库以执行语句,还是只使用每个DBMS的命令行实用程序执行脚本?如果是后者,则放入
调用get_dbsize_info(?,,,-1)编码到一个文件中(比如,
x.sql
),并使用DB2CLP:
DB2-tvfx.sql
执行它。感谢您的持续关注。我想直接对数据库执行这些脚本。