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_ID1REEL_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 当前值。想一想,看看它对你的情况是否有意义。