2

挿入されていない場合に値を挿入しようとしています。それ以外の場合は、そのフィールドの一部を更新しようとしています。使用される変数は 1 つだけです。ストア プロシージャを呼び出しても値は挿入されませんが、1 行が挿入されていることが示されます。初めてSPを試してみてください。

これは私のストアドプロシージャです

CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertLocation`(in IpAddress varchar(45))
BEGIN     
  if (SELECT count(*) as count 
      FROM mbuzzz.location_byhits 
      where IpAddress = IpAddress
      having count>0)    
  then     
      UPDATE location_byhits SET Hits=Hits+1 where  IpAddress=IpAddress;    
  else     
      insert into location_byhits(IpAddress,Date_current) 
      values (IpAddress,CURTIME());     
  End if ;    
end
4

1 に答える 1

5

入力パラメーターの名前を変更して、パラメーターを意味するときと列名を意味するときが DB エンジンに明確になるようにします。

where IpAddress = IpAddress 

エンジンは列をそれ自体と比較すると見なすため、常に true です。

試す

delimiter |
CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertLocation`(in IpAddrParam varchar(45))
BEGIN     
  if ((SELECT count(*) FROM mbuzzz.location_byhits where IpAddress = IpAddrParam)>0)    
  then     
      UPDATE location_byhits SET Hits=Hits+1 where IpAddress=IpAddrParam;    
  else     
      insert into location_byhits(IpAddress,Date_current) 
      values (IpAddrParam, CURTIME());     
  End if ;    
end
|
delimiter ;
于 2013-10-26T06:49:42.303 に答える