存储过程返回影响行数 不对啊

gyhmichael1985 2009-11-27 10:57:21
我的存储过程:
create or replace procedure p_User_Group_Add
(
GROUP_NAME_IN in VARCHAR2,
GROUP_PURVIEW_IN in INTEGER,
GROUP_NOTE_IN in VARCHAR2
)
is
v_count int:=0;
begin
select count(*)into v_count from Tb_User_Group where group_name = GROUP_NAME_IN;

if v_count = 0 then
insert into tb_user_group
( group_name, group_purview, group_note)
values
( GROUP_NAME_IN, GROUP_PURVIEW_IN, GROUP_NOTE_IN);
commit;
end if;
end;


我的C#代码:
OracleConnection con = new OracleConnection();
con.Open();
OracleCommand cmd = new OracleCommand("p_User_Group_Add", con);
cmd.CommandType = CommandType.StoredProcedure;

OracleParameter []para = { new OracleParameter("GROUP_NAME_IN","admin"),
new OracleParameter("GROUP_PURVIEW_IN",1),
new OracleParameter("GROUP_NOTE_IN","test")};
cmd.Parameters.AddRange(para);
int ret = cmd.ExecuteNonQuery();

con.Close();

为什么变量 ret 接收到的值总是:1 ??
应该返回0才对啊!因为我的并没有插入数据啊

表数据: Group_ID Group_Name group_purview group_note
1 admin 1 admin

...全文
108 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gyhmichael1985 2009-11-28
  • 打赏
  • 举报
回复
不用"sql%rowcount",用别的方法,问题已经解决

create or replace procedure p_User_Group_Add
(
GROUP_NAME_IN in VARCHAR2,
GROUP_PURVIEW_IN in INTEGER,
GROUP_NOTE_IN in VARCHAR2,
AffectRows out Number
)
is
v_count int:=0;
begin
select count(*)into v_count from Tb_User_Group where group_name = GROUP_NAME_IN;

if v_count = 0 then
insert into tb_user_group
( group_name, group_purview, group_note)
values
( GROUP_NAME_IN, GROUP_PURVIEW_IN, GROUP_NOTE_IN);
AffectRows:=sql%rowcount;
commit;
else
AffectRows:=0;
end if;
end;
Adebayor 2009-11-27
  • 打赏
  • 举报
回复
v_value=1 就证明有一条数据的
gyhmichael1985 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 adebayor 的回复:]
嗯,应该是你表里面原先就有一条满足条件的数据吧
[/Quote]

绝对没有啊.
Adebayor 2009-11-27
  • 打赏
  • 举报
回复
嗯,应该是你表里面原先就有一条满足条件的数据吧
gyhmichael1985 2009-11-27
  • 打赏
  • 举报
回复
declare
v_value int:=0;
begin
select count(*) into v_value from Tb_User_Group where group_name='????';
--v_value 0
v_value:=sql%rowcount ;
--v_value 1
end;

这里没有插入数据,但v_value确实是1,看来是sql%rowcount 的问题
Adebayor 2009-11-27
  • 打赏
  • 举报
回复
在procedure中输出v_count
Adebayor 2009-11-27
  • 打赏
  • 举报
回复
v_count 是不是1?
gyhmichael1985 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 adebayor 的回复:]
是不是表里面有一条数据呢?
不然的话就是你的ExecuteNonQuery方法有问题
[/Quote]

declare
v_value int:=0;
begin
select count(*) into v_value from Tb_User_Group where group_name='????';
--v_value 0
v_value:=sql%rowcount
;--v_value 1
end;

你自己调试一下吧,
Adebayor 2009-11-27
  • 打赏
  • 举报
回复
是不是表里面有一条数据呢?
不然的话就是你的ExecuteNonQuery方法有问题
Adebayor 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gyhmichael1985 的回复:]
晕,没有插入数据啊,这个我还真调试过 了
[/Quote]
表里面有没有数据?
gyhmichael1985 2009-11-27
  • 打赏
  • 举报
回复
晕,没有插入数据啊,这个我还真调试过 了
Adebayor 2009-11-27
  • 打赏
  • 举报
回复
你先调试下这个过程吧 看看到底插没插入数据
冒视已经插入数据了
gyhmichael1985 2009-11-27
  • 打赏
  • 举报
回复
连接字符串省略了

坐等 高手啊...

17,082

社区成员

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

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