-8
我想添加兩個遊標值,其中vehicle_id
和vehicleno
應該是相同的,然後更新表。
如何添加兩個遊標值並更新表
例如:
1.value from cur2 , totkm_t
2.value from cur3 , totkm_l
我想補充這兩種即
totkm_f = totkm_t + ktotm_l
然後
update fuelavg SET totkm=totkm_f where vid=vid_l;
我也想這樣除了其他店的泵,但我的存儲過程返回空值。
DELIMITER $$
DROP PROCEDURE IF EXISTS `searchvehicle`.`fuelavg`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `fuelavg`(IN startdate DATE, IN enddate DATE)
BEGIN
DECLARE vname_c VARCHAR(40);
DECLARE vnostring_c varchar(30);
DECLARE vowner_c varchar(40);
DECLARE vid_c,vmax_c,vmin_c,vcmpny_c,vtype_c INT;
DECLARE done INT DEFAULT FALSE;
DROP TABLE IF EXISTS fuelavg;
CREATE TABLE fuelavg
(
id int not null auto_increment primary key,
vid int,
vname varchar(40),
vnostring varchar(30),
v_type int,
vowner varchar(40),
store int,
pump int,
other int,
totfuel int,
totkm int,
vehavrg float,
cmpnyavg int,
maxavg int,
minavg int
);
BLOCK1: BEGIN
DECLARE CUR1 CURSOR FOR SELECT vehicle_owner.vid,vehicle_owner.vname, vehicle_owner.vowner,vehicle_owner.vnostring,vehicle_owner.vtype,vehicle_owner.vcompnyavg,vehicle_owner.maxavg,vehicle_owner.minavg FROM vehicle_owner;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;
OPEN CUR1;
READ_LOOP: LOOP
FETCH CUR1 INTO vid_c,vname_c,vowner_c,vnostring_c,vtype_c,vcmpny_c,vmax_c,vmin_c;
IF done THEN LEAVE READ_LOOP;
END IF;
SET autocommit=0;
INSERT INTO fuelavg(vid,vname,vnostring,vowner,v_type,cmpnyavg, maxavg,minavg)values(vid_c,vname_c,vnostring_c,vowner_c,vtype_c,vcmpny_c,vmax_c,vmin_c);
END LOOP;
CLOSE CUR1;
END BLOCK1;
BLOCK2: BEGIN
DECLARE vid_t,totkm_t,store_t,pump_t,other_t INT;
DECLARE vnostring_t VARCHAR(30);
DECLARE indate_t,outdate_t DATE DEFAULT FALSE;
DECLARE vid_l,totkm_l,store_l,pump_l,other_l INT;
DECLARE vnostring_l VARCHAR(30); `enter code here`
DECLARE vid_f,totkm_f,store_f,pump_f,other_f INT;
DECLARE vnostring_f VARCHAR(30);
DECLARE done INT DEFAULT FALSE;
DECLARE CUR2 CURSOR FOR SELECT logentry.vid,logentry.vnostring,sum(logentry.totkm),sum(logentry.other),sum(logentry.store),sum(logentry.pump) FROM logentry WHERE indate>=startdate and indate<=enddate group by vid,vnostring;
DECLARE CUR3 CURSOR FOR SELECT logentry.vid,logentry.vnostring,sum(logentry.totkm),sum(logentry.store),sum(logentry.other),sum(logentry.pump) FROM LOGENTRY WHERE INDATE<=(SELECT MAX(INDATE) FROM LOGENTRY WHERE TANKFULL=1 AND INDATE<startdate)AND tankfull=1 GROUP BY VID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;
OPEN CUR2;
OPEN CUR3;
READ_LOOP: LOOP
FETCH CUR2 INTO vid_t,vnostring_t,totkm_t,other_t,store_t,pump_t;
IF done THEN LEAVE READ_LOOP;
END IF;
FETCH CUR3 INTO vid_l,vnostring_l,totkm_l,other_l,store_l,pump_l;
IF done THEN LEAVE READ_LOOP;
END IF;
UPDATE fuelavg SET totkm=(totkm_t+totkm_l),other=(other_t+other_l),store=(store_t+store_l),pump=(pump_t+pump_l) WHERE vid=vid_t AND vnostring=vnostring_t;
IF done THEN LEAVE READ_LOOP;
END IF;
SET autocommit=1;
END LOOP;
CLOSE CUR2;
CLOSE CUR3;
END BLOCK2;
select * from fuelavg;
請給出適當的格式給你的問題。 –
你只是浪費了50美元的賞金。 – RubahMalam