请教:oracle有没有函数能用update语句一次性分配某货品?

[复制链接]
查看11 | 回复7 | 2018-5-22 16:17:26 | 显示全部楼层 |阅读模式
本帖最后由 sbw0818 于 2016-5-8 17:38 编辑
某仓库对应多个货架,每一个货架的货品都一样,每一个货架上存放的货品数量有可能不一样。假如某用户订购了1000个货品,仓库想实现一次性分配即如果货架1分配光了,就分配货架2,直到把货品分配光为止。想通过一个update语句来实现,不知道有没有相关函数来实现,在此恳请大神不吝赐教,万分感谢!
不通过函数的sql已实现,就想问问oracle新版本有没有这样的分析函数来实现。

回复

使用道具 举报

千问 | 2018-5-22 16:17:26 | 显示全部楼层
不通过函数的sql已实现,就想向各位大神讨教oracle新版本有没有这样的分析函数。
回复

使用道具 举报

千问 | 2018-5-22 16:17:26 | 显示全部楼层
可以用MERGE.
请按照置顶帖提问的智慧来提问。
回复

使用道具 举报

千问 | 2018-5-22 16:17:26 | 显示全部楼层
能说的详细点吗?可能是我没说清楚,这个例子不涉及insert
回复

使用道具 举报

千问 | 2018-5-22 16:17:26 | 显示全部楼层
sbw0818 发表于 2016-5-8 20:08
能说的详细点吗?可能是我没说清楚,这个例子不涉及insert

把不通过函数的sql已实现贴出来
回复

使用道具 举报

千问 | 2018-5-22 16:17:26 | 显示全部楼层
感觉这个要使用sum() over() 函数来实现;
回复

使用道具 举报

千问 | 2018-5-22 16:17:26 | 显示全部楼层
用plsql 挺好的,sql的话可以用楼上说的sum累计;
例子:SQL> create table a
2as
3select level as l,trunc(dbms_random.value(100,1000)) as s from dual connect by level
SQL> select * from A t;
L
S
---------- ----------
1971
2218
3460
4118
5695
6316
7427
8759
9726
10326
10 rows selected
SQL> update a t
2 set t.s =
3 (select case
4
when sselect * from A t;
L
S
---------- ----------
1
0
2189
3460
4118
5695
6316
7427
8759
9726
10326
10 rows selected
SQL>
SQL> update a t
2 set t.s =
3 (select case
4
when sselect * from A t;
L
S
---------- ----------
1
0
2
0
3
0
4
0
5462
6316
7427
8759
9726
10326
10 rows selected
复制代码
回复

使用道具 举报

千问 | 2018-5-22 16:17:26 | 显示全部楼层
万分感谢大神赐教,我明白了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行