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
执行它。感谢您的持续关注。我想直接对数据库执行这些脚本。