2016-09-30 19 views
0

データの新しい行を挿入する前に列(LiveStatus)を 'N'に更新するストアドプロシージャがあり、その列のが 'Y'に設定されている場合新しい値は既に存在し、そのLiveSTatusは 'Y'です。ストアドプロシージャで更新が機能しない

新しい値が挿入されますが、前の行のlivestatusは、同じDeviceIDのままで、まだ 'Y'です。

ストアドプロシージャ:これはあなたのコードである

DELIMITER $$ 

CREATE DEFINER=`testmysql`@`%` PROCEDURE `PDADeviceAssign`(

IN DeviceID varchar(50), 
IN EmpID varchar(50), 
IN PlazaID varchar(50), 
IN LaneID varchar(50), 
IN AssignDateTime varchar(50), 
IN AssignTranID varchar(50), 
IN AssignedBy varchar(50), 
IN Start_at varchar(50), 
IN End_at varchar(50), 
IN IsNextDay varchar(50), 
IN ClientID varchar(50), 
IN Description varchar(50) 
) 
BEGIN 

    declare Sno int; 

    set Sno=(SELECT MAX(Sno) FROM posassignment WHERE DeviceID=DeviceID);  
    update posassignment set LiveStatus ='N' where Sno=Sno; 

Insert into posassignment(DeviceID,EmpId,PlazaID,LaneID,AssignDateTime,AssignTranID,AssignedBy,LiveStatus,Start_at,End_at,IsNextDay,ClientId,Description) 
    values (DeviceID,EmpID,PlazaID,LaneID,AssignDateTime,AssignTranID,AssignedBy,'Y',Start_at,End_at,IsNextDay,ClientId,Description); 
END 

答えて

0

は:

declare Sno int; 

set Sno=(SELECT MAX(Sno) FROM posassignment WHERE DeviceID=DeviceID);  
update posassignment set LiveStatus ='N' where Sno=Sno; 

updateはと等価ではありません。です

update posassignment set LiveStatus = 'N' where Sno is not null; 

、どちらもsno参照がパラメータにあります。 DeviceIDと同じ問題があります。

CREATE DEFINER=`testmysql`@`%` PROCEDURE `PDADeviceAssign`(
    IN in_DeviceID varchar(50), 
    IN in_EmpID varchar(50), 
    . . . 
) 
BEGIN 
    declare v_Sno int; 

    set v_Sno = (SELECT MAX(Sno) 
       FROM posassignment 
       WHERE DeviceID = in_DeviceID 
       ); 

    update posassignment 
     set LiveStatus = 'N' 
     where Sno = v_Sno; 
関連する問題