我很累找出解决方案,请帮助我。
我想知道如何更改第一个表reels_table
的变量值
通过第二个表stockconsumption
oracle形式的其他变量。
假设
我有一个重400公斤的纸料,我以甲骨文表格保存了。
第二天,我卖掉了200公斤重的纸料。
现在我几天后想做的实际原因是
左权重应该在第一个表格变量中,以便下次进行换行。
我的代码在下面,带有图片参考。
DECLARE
REEL_ID1 NUMBER;
REEL_ID2 NUMBER;
LEFT_R1 NUMBER;
LEFT_R2 NUMBER;
BEGIN
SELECT RID_P,
RID_N,
R_W_P_B,
R_W_N_B
INTO REEL_ID1,
REEL_ID2,
LEFT_R1,
LEFT_R2
FROM STOCKCONSUMPTION
WHERE :R_ID = REEL_ID1
AND :R_ID = REEL_ID2;
:WEIGHT:=LEFT_R1;
END;
答案 0 :(得分:2)
您编写的代码对我来说意义不大。
WHERE
条件可疑;似乎您将局部变量与块项目一起使用了。此外,:R_ID
等于REEL_ID1
和REEL_ID2
的可能性有多大?我会尝试这样的事情:
select s.r_w_p_b
into :reels_table.weight
from stockconsumption s
where s.rid_p = :reels_table.r_id
and s.rid_n = :reels_table.r_id;
如您所见:
WHERE
子句中的二手商品的值(再一次,我认为这是错误的,但您应该了解得更多)但是,如果我了解您在做什么-您做错了。库存不应该在任何表中作为 static 值保存-在需要时随时进行计算。当许多人对同一数据集执行DML时,在多用户环境中维护完整性将变得困难。这是显示一般原理的示例。
SQL> create table stock
2 (item_id number,
3 transaction_type varchar2(1), -- B - bought; S - sold
4 weight number
5 );
Table created.
SQL> -- bought 400 kg; stock = 400
SQL> insert into stock values (1234, 'B', 400);
1 row created.
SQL> select item_id,
2 sum(decode(transaction_type, 'B', weight, 'S', -weight)) stock
3 from stock
4 group by item_id;
ITEM_ID STOCK
---------- ----------
1234 400
SQL> -- bought additional 600 kg; stock = 1000
SQL> insert into stock values (1234, 'B', 600);
1 row created.
SQL> select item_id,
2 sum(decode(transaction_type, 'B', weight, 'S', -weight)) stock
3 from stock
4 group by item_id;
ITEM_ID STOCK
---------- ----------
1234 1000
SQL> -- sold 300 kg; stock = 700
SQL> insert into stock values (1234, 'S', 300);
1 row created.
SQL> select item_id,
2 sum(decode(transaction_type, 'B', weight, 'S', -weight)) stock
3 from stock
4 group by item_id;
ITEM_ID STOCK
---------- ----------
1234 700
SQL>
看到了吗?没有其他表或列可以保持当前状态-简单的SELECT
返回当前值。考虑一下,看看是否适合您的情况。