我的一个存储过程中要用到IN,存储过程如下
CREATE OR REPLACE PROCEDURE TEST
(
P_D_CODE VARCHAR2,
RETURN_VALUE OUT REDATASET.DS
)
AS
BEGIN
dbms_output.put_line(P_D_CODE);
OPEN RETURN_VALUE FOR
'SELECT * FROM TTRD_BIDD_INFO B WHERE B.D_CODE IN ('||P_D_CODE||')';
END;参数P_D_CODE,我在plsql中调试的时候,传入'123','456'像这样的是对的,但是通过程序,调用这个存储过程时,总是报找不到表达式。请问各位大虾这是什么问题,我对oracle不是很熟。
CREATE OR REPLACE PROCEDURE TEST
(
P_D_CODE VARCHAR2,
RETURN_VALUE OUT REDATASET.DS
)
AS
BEGIN
dbms_output.put_line(P_D_CODE);
OPEN RETURN_VALUE FOR
'SELECT * FROM TTRD_BIDD_INFO B WHERE B.D_CODE IN ('||P_D_CODE||')';
END;参数P_D_CODE,我在plsql中调试的时候,传入'123','456'像这样的是对的,但是通过程序,调用这个存储过程时,总是报找不到表达式。请问各位大虾这是什么问题,我对oracle不是很熟。
解决方案 »
- 麻烦看看,这个问题在哪里。
- 匿名类型的一个问题
- C# 里有word类型吗?
- 新人请教request.querystring相关问题
- 点击DataGridview列头进行排序,怎样实现某一列排序时列值不变?
- 请教BindingSource如何用
- 请问为什么USER CONTROL不能在设计时COPY,而直接继承的COMPONENTS就可以??提示对象引用未找到
- 如何循环取一个数组内的差?
- 新手请教:C#调用存储过程三个参数a1,a2,a3其中a3是返回参数,还有一个返回表。请给出完整代码,最好有说明。谢谢!
- DBC怎么用C#解析,求指点
- ultraChart的柱状图如何在每个柱子的顶部一直显示该柱子的数值?
- 刚听说.net开发的项目很容易被人反汇编?
{
string timeQuery = DateTime.Now.Ticks.ToString();
Database db = null;
switch (aDBType)
{
case DatabaseType.APP:
db = DBFactory.APP;
break;
case DatabaseType.MD:
db = DBFactory.MD;
break;
case DatabaseType.TRD:
db = DBFactory.TRD;
break;
default:
break;
}
if (db == null)
{
return null;
}
//Log4.LogHelper.Write(Log4.LogLevel.Debug, string.Format("{0},收到存储过程({1})请求, 请求时间点({2})。", USER_CODE, aStoreProName, timeQuery));
DbCommand cmd = db.GetStoredProcCommand(aStoreProName);
//Log4.LogHelper.Write(Log4.LogLevel.Debug, string.Format("{0},准备解析存储过程({1})参数, 请求时间点({2})。", USER_CODE, aStoreProName, timeQuery));
db.DiscoverParameters(cmd);
//Log4.LogHelper.Write(Log4.LogLevel.Debug, string.Format("{0},成功解析存储过程({1})参数, 准备传入参数, 请求时间点({2})。", USER_CODE, aStoreProName, timeQuery)); for (int i = 0; i < aParams.Count; i++)
{
cmd.Parameters[i + 1].Value = aParams[i];
//Log4.LogHelper.Write(Log4.LogLevel.Debug, string.Format("{0},存储过程({1})参数{2}={3}传入成功, 请求时间点({4})。", USER_CODE, aStoreProName, cmd.Parameters[i + 1].ParameterName, aParams[i].ToString(), timeQuery));
} //廖正华 2010-07-01 LOGON_USER作为参数时,用当前登录用户将其代替
foreach (DbParameter paramer in cmd.Parameters)
{
if (paramer.ParameterName == "LOGON_USER")
{
paramer.Value = USER_CODE;
}
} //Log4.LogHelper.Write(Log4.LogLevel.Debug, string.Format("{0},准备查询存储过程({1}), 请求时间点({2})。", USER_CODE, aStoreProName, timeQuery));
ReportDesignerDataSet.ReportDesignDataTable table = SimpleDal.Query<ReportDesignerDataSet.ReportDesignDataTable>(db, cmd);
cmd.Dispose();
//Log4.LogHelper.Write(Log4.LogLevel.Debug, string.Format("{0},成功查询存储过程({1}), 请求时间点({2})。", USER_CODE, aStoreProName, timeQuery)); return table;
}
ORA-06512: at "XIR_TRD_NC.TEST", line 10
ORA-06512: at line 1感谢各位啊。
cmd.Parameters[i + 1].Value = aParams[i];
这里定义下ParameterDirection,尤其是OUT的。断点检查cmd.CommandType是否正确。另外,XIR_TRD_NC 是PL/SQL的body名?
XIR_TRD_NC是数据库用户名称。
调试,可以很方便找到语法错误和逻辑错误。
using (OracleCommand comm = new OracleDbCommand ( "select * from Tb where typeid=:typeid order by createtime desc ", conn))
{
comm.Parameters.AddWithValue( ":typeid ", typeid);