我使用DataStudio建立了一个PL/SQL程序包,名为PKG_TEST, 然后在里面创建了一个存储过程P_TEST,这个存储过程有两个输入参数,作用是返回一个结果集。
Package定义如下:规范部分:CREATE OR REPLACE PACKAGE PKG_TEST AS
TYPE cur IS REF CURSOR; PROCEDURE P_SREFER (
P_PLANID IN T_PRODUCINGPLAN.PLANID%TYPE,
P_STATE IN T_PRODUCINGPLAN.PLAN_STATE%TYPE, P_CUR OUT cur
);
END PKG_TEST ;主体部分:CREATE OR REPLACE PACKAGE BODY PKG_TEST AS
PROCEDURE P_SREFER (
P_PLANID IN T_PRODUCINGPLAN.PLANID%TYPE,
P_STATE IN T_PRODUCINGPLAN.PLAN_STATE%TYPE,
P_CUR OUT V_CUR
)
IS
BEGIN
OPEN P_CUR FOR SELECT
PLANID, --计划号
PLAN_STATE, --状态
PROC_STATE, --执行状态
SPEC, --钢种
WORKFLOW, --生产路径 SEQNO, --顺序号
INS_EMP --录入人
FROM T_PRODUCINGPLAN
WHERE
PLANID LIKE P_PLANID || '%'
AND
PROC_STATE LIKE P_STATE || '%' -- 计划执行状态.
ORDER BY SEQNO, PLANID ASC;
END P_SREFER;
End PKG_TEST ;前台对应对应C#代码如下: ds = new DataSet();
OleDbConn = new DB2Connection();
OleDbAdp = new DB2DataAdapter();
string iniConnectString = "Database=testdb;User ID=db2admin;Password=sa;Server=localhost:50000";
OleDbConn.ConnectionString = iniConnectString; OleDbConn.Open();
OleDbAdp = new DB2DataAdapter("call PKG_TEST.P_TEST('1','A')", OleDbConn);
OleDbAdp.Fill(ds, "TableS");报错如下:
ERROR [42884] [IBM][DB2/NT] SQL0440N 找不到具有兼容自变量的类型为 "PROCEDURE" 的名为 "PKG_TEST.P_TEST" 的已授权例程。 SQLSTATE=42884
Package定义如下:规范部分:CREATE OR REPLACE PACKAGE PKG_TEST AS
TYPE cur IS REF CURSOR; PROCEDURE P_SREFER (
P_PLANID IN T_PRODUCINGPLAN.PLANID%TYPE,
P_STATE IN T_PRODUCINGPLAN.PLAN_STATE%TYPE, P_CUR OUT cur
);
END PKG_TEST ;主体部分:CREATE OR REPLACE PACKAGE BODY PKG_TEST AS
PROCEDURE P_SREFER (
P_PLANID IN T_PRODUCINGPLAN.PLANID%TYPE,
P_STATE IN T_PRODUCINGPLAN.PLAN_STATE%TYPE,
P_CUR OUT V_CUR
)
IS
BEGIN
OPEN P_CUR FOR SELECT
PLANID, --计划号
PLAN_STATE, --状态
PROC_STATE, --执行状态
SPEC, --钢种
WORKFLOW, --生产路径 SEQNO, --顺序号
INS_EMP --录入人
FROM T_PRODUCINGPLAN
WHERE
PLANID LIKE P_PLANID || '%'
AND
PROC_STATE LIKE P_STATE || '%' -- 计划执行状态.
ORDER BY SEQNO, PLANID ASC;
END P_SREFER;
End PKG_TEST ;前台对应对应C#代码如下: ds = new DataSet();
OleDbConn = new DB2Connection();
OleDbAdp = new DB2DataAdapter();
string iniConnectString = "Database=testdb;User ID=db2admin;Password=sa;Server=localhost:50000";
OleDbConn.ConnectionString = iniConnectString; OleDbConn.Open();
OleDbAdp = new DB2DataAdapter("call PKG_TEST.P_TEST('1','A')", OleDbConn);
OleDbAdp.Fill(ds, "TableS");报错如下:
ERROR [42884] [IBM][DB2/NT] SQL0440N 找不到具有兼容自变量的类型为 "PROCEDURE" 的名为 "PKG_TEST.P_TEST" 的已授权例程。 SQLSTATE=42884
解决方案 »
- 从40个数字中随机抽取数
- 请教高手:一个关于GetCharIndexFromPosition的奇怪问题
- [VSTS团队开发]那里有最新完整安装包下载!
- SQL转为C#实现相同功能
- 我的防火墙为什么不停的闪呀! 都好几天了。。。。。被拒绝的信息如下,请帮帮忙,这是怎么回事?
- COM中SAFEARRARY,VARIANT以及在C#中调用object遇到的问题,期待高手指点
- C#怎么判断一个json对象中存在某个键
- 想制作一个FTP客户端,关于使用的控件问题.
- 谁会编外挂?
- 当dropDownList中只有一个可选项时……
- 新手求解惑
- C# DB2Adpter调用DB2 Package中存储过程的问题!!!!!
:
:从输出信息中对问题原因的解释可以发现,导致这一问题的原因有多种,当用户将所列示的原因逐条检查后,却发现这些都不是导致自己当前所遇到的 SQL0440N 错误的原因,此时可考虑另外一个 SQL0440N 解释信息中未提到的一种情况:即当函数的创建时间晚于系统的当前时间,同样会出现该报错。为检查问题,用户可利用下面的 SQL 语句对各函数创建的时间戳选项 CREATE_TIME 进行查询:db2 select funcschema, funcname, create_time from syscat.functions 如果存在某些函数的创建时间晚于当前系统时间的情况,例如用户误置系统的时间为过去某个时间,而使用的函数的创建时间又晚于这一时间,便会在运行相关 SQL 语句时遇到 SQL0440N 的报错。解决这一问题的方法很简单,用户只要重新正确地设置操作系统的当前时间,使它晚于 DB2 自带函数的创建时间即可。
cmdInsert.CommandText = "oper_blacklistpacket.InsertBlackListInfo";
cmdInsert.CommandType = CommandType.StoredProcedure; cmdInsert.Parameters.Add("p_ID", OracleType.Number).Direction = ParameterDirection.Output;
cmdInsert.Parameters.AddWithValue("p_VehicleNo", blackListInfo.VehicleNo);
cmdInsert.Parameters.AddWithValue("p_Submitter", blackListInfo.Submitter);
cmdInsert.Parameters.AddWithValue("p_LockReason", blackListInfo.LockReason); con.Open();
cmdInsert.ExecuteNonQuery();
参照一下我这个写法,绝对没有错
别忘了给分,呵呵!