在用.net调用oracle存储过程修改数据的时候,此存储过程的基本结构如下
假设存在两个输入参数V_USERID,V_USERNAME
在存储过程中声明了rowcount为number
于是写大代码如下
select rowcount=count(*) from user where username=V_USERNAME
if(rowcount<=0)
begin
  update.......
end但if条件不满足的话,实际上不会执行update,但是,当用.net调用这样的一个存储过程的时候,最后ExuteNoQuery方法返回的是1,不管if条件满足不满足。
在sql server中不会这样。
难道oracle中需要弄一个输出参数来判断是否修改成功?

解决方案 »

  1.   

    你这里面是根据ExecuteNonQuery来执行的,他的意思是返回被执行的参数影响的行数,
    select rowcount=count(*) from user where username=V_USERNAME  //这里已经是有一行记录了,if(rowcount <=0) 
    begin 
      update.......    //如果有的话,他有cover上面的,
    end 所以你始终返回的都有1
    if exists(select top 1 id from user where username=@username)  有记录的话,则执行
    begin
      update.....
    end
      

  2.   

    应该和Oracle有关系吧。SQL可以。
      

  3.   

    Oracle确实有这个问题,sql就没有,估计要用输出参数来实现判断.