Java 更新查询多行
如何在用户输入数据时在tbpembelian上更新sisastock 示例:用户输入数据120。然后,sisastock更新0,下一行更新80 这是我的表格行: 更新:输入数据用户120将插入tbPenjualan中的stockJual 然后更新tbPembelian 输入120然后更新: 第1行:列stockkeluar=100,sisastock=0 第2行:列stockkeluar=20,sisastock=80Java 更新查询多行,java,mysql,sql,netbeans,Java,Mysql,Sql,Netbeans,如何在用户输入数据时在tbpembelian上更新sisastock 示例:用户输入数据120。然后,sisastock更新0,下一行更新80 这是我的表格行: 更新:输入数据用户120将插入tbPenjualan中的stockJual 然后更新tbPembelian 输入120然后更新: 第1行:列stockkeluar=100,sisastock=0 第2行:列stockkeluar=20,sisastock=80 对不起,我的英语不好。您最好在java代码中这样做,但您可以在mysql中使
对不起,我的英语不好。您最好在java代码中这样做,但您可以在mysql中使用包含光标的过程来完成这项工作。比如说
DROP TABLE IF EXISTS T,T1;
CREATE TABLE T(ID INT AUTO_INCREMENT PRIMARY KEY,IDPRD VARCHAR(10), INSTOCK INT);
CREATE TABLE T1(ID INT AUTO_INCREMENT PRIMARY KEY,IDPRD VARCHAR(10), INSTOCK INT);
DROP PROCEDURE IF EXISTS P;
DELIMITER $$
CREATE PROCEDURE P(INPRD VARCHAR(10),INAMT INT)
BEGIN
DECLARE CONT INT DEFAULT 1;
declare finished int default 0;
declare vid int;
declare vidprd varchar(10);
declare vinstock int;
DECLARE cur CURSOR FOR select id,idprd,instock from t where instock > 0 order by id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
SELECT CASE WHEN SUM(INSTOCK) < INAMT THEN 0 ELSE 1 END INTO CONT FROM T WHERE IDPRD = INPRD GROUP BY IDPRD;
if cont = 1 then
start transaction;
insert into t1(idprd,instock) values(inprd,inamt);
open cur;
fetch cur into vid,vidprd,vinstock;
curloop: loop
if finished = 1 or inamt = 0 then
leave curloop;
end if;
if vinstock >= inamt then
update t
set instock = instock - inamt
where id = vid and idprd = vidprd;
set inamt = 0;
else
update t
set instock = 0
where id = vid and idprd = vidprd;
set inamt = inamt - vinstock;
fetch cur into vid,vidprd,vinstock;
end if;
end loop curloop;
commit;
end if;
END $$
DELIMITER :
truncate table t;
INSERT INTO T(IDPRD,INSTOCK) VALUES ('A1',100),('A1',100);
truncate table t1;
CALL P('A1',120);
select 't', t.* from t
union all
select 't1',t1.* from t1;
+----+----+-------+---------+
| t | ID | IDPRD | INSTOCK |
+----+----+-------+---------+
| t | 1 | A1 | 0 |
| t | 2 | A1 | 80 |
| t1 | 1 | A1 | 0 |
+----+----+-------+---------+
3 rows in set (0.00 sec)
您是否可以提供更多详细信息,例如当用户尝试插入120时,您正在编写的插入查询,以及此查询中的120是什么case@Eshu:我更新我的问题。对不起,我的英语不清楚这里的逻辑是什么。我的猜测是,tbPembelian表为idprd提供了tbPenjualan表,并将sisastock值按idbell顺序减少为用户输入量的值。对吗?@P.Salmon是的。如果我的用户需要,这是一个简单的代码,但我的用户不想在一个产品中多次输入库存。。呵呵,您可以通过添加您想要做的事情背后的逻辑,以及作为文本的示例数据、预期输出和表定义来改进这个问题。