oracle中如何修改变量的值
How to change value of variable in oracle form
我很难找到解决方案,请帮助我。
我想知道如何改变第一个tablereels_table
的变量值
通过第二个table的其他变量stockconsumption
oracle form.
假设
我有一个重量为 400 公斤的纸料,我将其保存在我的 oracle 表格中。
第二天我卖掉了重量为 200 公斤的纸料。
现在我想从几天开始做的真正原因是
左边的权重应该在第一个 table 变量中用于下一次传输。
我的代码在下面带有图片参考。
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;
PICTURE IS HERE
你写的代码对我来说没有多大意义。
- 您已经声明了很多变量,但我认为您不需要其中任何一个
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
子句中使用了项目的值(我再次认为这是错误的,但你应该知道得更多)
但是,如果我明白你在做什么 - 你做错了。库存不应在任何 table 中保持为 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>
看到了吗?没有额外的 table(s) 或列来保持当前状态 - 一个简单的 SELECT
returns 当前值。想一想,看看它对你的情况是否有意义。
我很难找到解决方案,请帮助我。
我想知道如何改变第一个tablereels_table
通过第二个table的其他变量stockconsumption
oracle form.
假设
我有一个重量为 400 公斤的纸料,我将其保存在我的 oracle 表格中。
第二天我卖掉了重量为 200 公斤的纸料。
现在我想从几天开始做的真正原因是
左边的权重应该在第一个 table 变量中用于下一次传输。
我的代码在下面带有图片参考。
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;
PICTURE IS HERE
你写的代码对我来说没有多大意义。
- 您已经声明了很多变量,但我认为您不需要其中任何一个
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
子句中使用了项目的值(我再次认为这是错误的,但你应该知道得更多)
但是,如果我明白你在做什么 - 你做错了。库存不应在任何 table 中保持为 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>
看到了吗?没有额外的 table(s) 或列来保持当前状态 - 一个简单的 SELECT
returns 当前值。想一想,看看它对你的情况是否有意义。