Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 基于先前记录值填充数量的PLSQL过程_Oracle_Stored Procedures_Plsql - Fatal编程技术网

Oracle 基于先前记录值填充数量的PLSQL过程

Oracle 基于先前记录值填充数量的PLSQL过程,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我有一张桌子 - ITEM_NUMBER QTY_FROM QTY_TO - ABC 10 - ABC 20 - ABC 30 - DEF 100 - DEF 250 - DEF 400 我需要编写一个plsql过程,该过程将基于同一物料编号下一行的QTY\u,将QTY\u填充到列。 例如,如果物料编号为ABC且第一行的数量为10,下一行的数量为20…我希望程序查

我有一张桌子

- ITEM_NUMBER QTY_FROM QTY_TO
 - ABC           10
 - ABC           20
 - ABC           30
 - DEF           100
 - DEF           250
 - DEF           400
我需要编写一个plsql过程,该过程将基于同一物料编号下一行的
QTY\u,将
QTY\u填充到
列。 例如,如果物料编号为ABC
且第一行的
数量为10,下一行的
数量为20…我希望程序查看第二行…并将第一行的
数量填充为19(下一行数量从-1)


作为
lead
函数的第三个参数,您可以添加默认值。当给定的
项目编号不存在下一行时,将使用此选项,因此在行
-ABC 30
的情况下,如果您执行
引导(数量从,1,数量从)
将有
29
作为
数量到
,但您没有;t在您的问题中定义了边缘情况。

无需程序,只需简单更新:

update t 
  set qty_to = 
    (select min(qty_from)-1 from t t2 
      where item_number = t.item_number and qty_from > t.qty_from)

结果:

SQL> select * from t order by item_number, qty_from;

ITEM_NUMBER QTY_FROM  QTY_TO
----------- -------- -------
ABC               10      19
ABC               20      29
ABC               30 
DEF              100     249
DEF              250     399
DEF              400 

6 rows selected

您的问题不清楚,您想检查qty_from=10和第二行qty_from=20,那么第一行将是19?
SQL> select * from t order by item_number, qty_from;

ITEM_NUMBER QTY_FROM  QTY_TO
----------- -------- -------
ABC               10      19
ABC               20      29
ABC               30 
DEF              100     249
DEF              250     399
DEF              400 

6 rows selected