ORA-06550,PLS-00103错误,求助!

ga3ga3 2010-10-19 01:49:15
在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;


不清楚到底错哪里,分不多,请兄弟们帮忙。
...全文
1782 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ga3ga3 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wkc168 的回复:]
看哪个过程也在调用此序列[/Quote]

就一个。.NET调用还是出现那个错误。oracle和sql 2005 的存储过程调用区别很大,转到oracle开发,我太菜了。很不明确,不用存储过程,用sql语句倒是没有问题,但没有返回值,不能确定是否插入成功
心中的彩虹 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ga3ga3 的回复:]
引用 3 楼 wkc168 的回复:
var num number
exec UP_BLACKINFO_ADD (:num,0,0,11111111)
print num


谢谢楼上的兄弟,
通过这种方式在SQLPLUS中能够得到 num ,但通过.NET调用存储过程依然有问题。
这个比较迷茫。是不是ReturnValue前需要加“:”表示是输出字段;


C# code
……
[/Quote]
看哪个过程也在调用此序列
ga3ga3 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wkc168 的回复:]
var num number
exec UP_BLACKINFO_ADD (:num,0,0,11111111)
print num
[/Quote]

谢谢楼上的兄弟,
通过这种方式在SQLPLUS中能够得到 num ,但通过.NET调用存储过程依然有问题。
这个比较迷茫。是不是ReturnValue前需要加“:”表示是输出字段;

new OracleParameter(":ReturnValue",OracleType.Int16,4,……


这个自己测试下,另外有个问题。
通过上述SQLPLUS,num每次不是+1,而是+2,这个是什么道理。存储过程里面有问题么?



minitoy 2010-10-19
  • 打赏
  • 举报
回复
OracleParameter没指定类型,默认是in参数,out参数要指定类型.
心中的彩虹 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wkc168 的回复:]
引用 2 楼 ga3ga3 的回复:
我想插入数据库后,通过ReturnValue获取最新的BLACK_ID,
这个存储过程
execute immediate UP_BLACKINFO_ADD (0,0,0,11111111);
报错为:
ORA-06550: 第一行,第17列:
PLS-00103:出现符号"UP_BLACKINFO_ADD"在需要下列之一时:
:= . ( @ ……
[/Quote]
--or
declare
v number;
begin
UP_BLACKINFO_ADD (v,0,0,11111111);
dbms_output.put_line(v);
end;
心中的彩虹 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ga3ga3 的回复:]
我想插入数据库后,通过ReturnValue获取最新的BLACK_ID,
这个存储过程
execute immediate UP_BLACKINFO_ADD (0,0,0,11111111);
报错为:
ORA-06550: 第一行,第17列:
PLS-00103:出现符号"UP_BLACKINFO_ADD"在需要下列之一时:
:= . ( @ % 符号 ":="被替换为"UP_BL……
[/Quote]
调用出错 因为你的含有out参数 不能这样调用

var num number
exec UP_BLACKINFO_ADD (:num,0,0,11111111)
print num
ga3ga3 2010-10-19
  • 打赏
  • 举报
回复
我想插入数据库后,通过ReturnValue获取最新的BLACK_ID,
这个存储过程
execute immediate UP_BLACKINFO_ADD (0,0,0,11111111);
报错为:
ORA-06550: 第一行,第17列:
PLS-00103:出现符号"UP_BLACKINFO_ADD"在需要下列之一时:
:= . ( @ % 符号 ":="被替换为"UP_BLACKINFO_ADD" 后继续。

不知道什么错误!!
心中的彩虹 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 ga3ga3 的回复:]
在toad for oracle10中对存储过程调试没有问题!
在.NET中调试,报上面的错误!

其中页面代码为

C# code

public int BlackInfoAdd(GM.Model.BLACKINFO model)
{
int rowsAffected;
OracleParame……
[/Quote]
单独过程的写法没什么问题 估计看是你的 C#中问题 你要么到sqlplus运行下过程

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧