在toad for oracle10中对存储过程调试没有问题!
在.NET中调试,报上面的错误!其中页面代码为 public int BlackInfoAdd(GM.Model.BLACKINFO model)
{
int rowsAffected;
OracleParameter[] parameters = {
new OracleParameter("ReturnValue",OracleType.Int16,4,ParameterDirection.ReturnValue,false,0,0,string.Empty,DataRowVersion.Default,null),
new OracleParameter("vFlag", OracleType.Number),
new OracleParameter("vprior", OracleType.Number),
new OracleParameter("vblackNumber", OracleType.Number)
};
//parameters[0].Direction = ParameterDirection.ReturnValue;
parameters[1].Value = model.FLAG;
parameters[2].Value = model.PRIOR;
parameters[3].Value = model.BLACKNUMBER; return DbHelperOra.RunProcedure("UP_BLACKINFO_ADD", parameters,out rowsAffected);
}
----------------------------------------- public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected )
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
int result;
connection.Open();
OracleCommand command = BuildIntCommand(connection,storedProcName, parameters );
rowsAffected = command.ExecuteNonQuery();
result = (int)command.Parameters["ReturnValue"].Value;
//Connection.Close();
return result;
}
}
-------------------------------------------------存储过程为:CREATE OR REPLACE PROCEDURE EFENCE."UP_BLACKINFO_ADD" (
ReturnValue OUT int,
vflag number,
vprior number,
vblackNumber number
)
AS
BEGIN
insert into BLACKINFO values(SEQ_BLACK_ID.NEXTVAL,vPrior,vFlag,vBlackNumber,null,0);if (SQL%Rowcount=1) then
SELECT SEQ_BLACK_ID.CURRVAL INTO ReturnValue FROM DUAL;
else
ReturnValue:=0;
end if;END UP_BLACKINFO_ADD;
不清楚到底错哪里,分不多,请兄弟们帮忙。
在.NET中调试,报上面的错误!其中页面代码为 public int BlackInfoAdd(GM.Model.BLACKINFO model)
{
int rowsAffected;
OracleParameter[] parameters = {
new OracleParameter("ReturnValue",OracleType.Int16,4,ParameterDirection.ReturnValue,false,0,0,string.Empty,DataRowVersion.Default,null),
new OracleParameter("vFlag", OracleType.Number),
new OracleParameter("vprior", OracleType.Number),
new OracleParameter("vblackNumber", OracleType.Number)
};
//parameters[0].Direction = ParameterDirection.ReturnValue;
parameters[1].Value = model.FLAG;
parameters[2].Value = model.PRIOR;
parameters[3].Value = model.BLACKNUMBER; return DbHelperOra.RunProcedure("UP_BLACKINFO_ADD", parameters,out rowsAffected);
}
----------------------------------------- public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected )
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
int result;
connection.Open();
OracleCommand command = BuildIntCommand(connection,storedProcName, parameters );
rowsAffected = command.ExecuteNonQuery();
result = (int)command.Parameters["ReturnValue"].Value;
//Connection.Close();
return result;
}
}
-------------------------------------------------存储过程为:CREATE OR REPLACE PROCEDURE EFENCE."UP_BLACKINFO_ADD" (
ReturnValue OUT int,
vflag number,
vprior number,
vblackNumber number
)
AS
BEGIN
insert into BLACKINFO values(SEQ_BLACK_ID.NEXTVAL,vPrior,vFlag,vBlackNumber,null,0);if (SQL%Rowcount=1) then
SELECT SEQ_BLACK_ID.CURRVAL INTO ReturnValue FROM DUAL;
else
ReturnValue:=0;
end if;END UP_BLACKINFO_ADD;
不清楚到底错哪里,分不多,请兄弟们帮忙。
这个存储过程
execute immediate UP_BLACKINFO_ADD (0,0,0,11111111);
报错为:
ORA-06550: 第一行,第17列:
PLS-00103:出现符号"UP_BLACKINFO_ADD"在需要下列之一时:
:= . ( @ % 符号 ":="被替换为"UP_BLACKINFO_ADD" 后继续。
不知道什么错误!!
exec UP_BLACKINFO_ADD (:num,0,0,11111111)
print num
declare
v number;
begin
UP_BLACKINFO_ADD (v,0,0,11111111);
dbms_output.put_line(v);
end;
谢谢楼上的兄弟,
通过这种方式在SQLPLUS中能够得到 num ,但通过.NET调用存储过程依然有问题。
这个比较迷茫。是不是ReturnValue前需要加“:”表示是输出字段;new OracleParameter(":ReturnValue",OracleType.Int16,4,……这个自己测试下,另外有个问题。
通过上述SQLPLUS,num每次不是+1,而是+2,这个是什么道理。存储过程里面有问题么?
就一个。.NET调用还是出现那个错误。oracle和sql 2005 的存储过程调用区别很大,转到oracle开发,我太菜了。很不明确,不用存储过程,用sql语句倒是没有问题,但没有返回值,不能确定是否插入成功