如何以oracle形式更改变量的值

时间:2018-12-21 12:38:12

标签: sql oracle oracleforms

我很累找出解决方案,请帮助我。

我想知道如何更改第一个表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;

PICTURE IS HERE

1 个答案:

答案 0 :(得分:2)

您编写的代码对我来说意义不大。

  • 您已经声明了很多变量,但我认为您不需要其中的任何一个
  • 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子句中的二手商品的值(再一次,我认为这是错误的,但您应该了解得更多)

但是,如果我了解您在做什么-您做错了。库存不应该在任何表中作为 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返回当前值。考虑一下,看看是否适合您的情况。