团队, 需要使用一些逻辑根据同一个表的其他列更新现有的表列。
来源表如下:
价格表
BU_NAME VAL_STATUS LOOPSETID
AAA Y 0
BBB Y 0
CCC N 0
DDD Y 0
EEE Y 0
FFF Y 0
GGG Y 0
只需要选择
VAL_STATUS='Y
' 条记录,并将它们排序为每组最多 2 条记录,并更新列 LOOPSETID
,如下所示:
BU_NAME VAL_STATUS LOOPSETID
AAA Y 1
BBB Y 1
CCC N 0
DDD Y 2
EEE Y 2
FFF Y 3
GGG Y 3
我有以下针对该特定列值的查询 trunc((rowno + p_max_batch_rec - 1)/ p_max_batch_rec)loopsetid
其中 p_max_batch_rec 是当前设置为 2 的参数。该查询与源表列比较中插入其他目标表一起使用。
但现在我需要在源表本身中更新这个值。所以需要合并语句。
当我执行以下查询时遇到问题
MERGE INTO PRICELIST_SRC_TBL pt
USING PRICELIST_SRC_TBL ps
ON (ps.VAL_STATUS = 'Y')
WHEN matched THEN UPDATE
SET pt.LOOPSETID = select trunc((rowno + 2 - 1) / 2) loopsetid from
(select ROW_NUMBER() OVER( ORDER BY val_status ) rowno from PRICELIST_SRC_TBL where VAL_STATUS = 'Y');
我得到的错误如下
Error starting at line : 1 in command -
MERGE INTO PRICELIST_SRC_TBL pt
USING PRICELIST_SRC_TBL ps
ON (ps.VAL_STATUS = 'Y')
WHEN matched THEN UPDATE
SET pt.LOOPSETID = select trunc((rowno + 2 - 1) / 2) loopsetid from
(select ROW_NUMBER() OVER( ORDER BY val_status ) rowno from PRICELIST_SRC_TBL where VAL_STATUS = 'Y')
Error at Command Line : 5 Column : 20
Error report -
SQL Error: ORA-00936: missing expression
00936. 00000 - "missing expression"
*Cause:
*Action:
将该查询放在“USING”子句中,而不是放在 merge_update_clause 中。这有效:
MERGE INTO pricelist_src_tbl pt
USING (
SELECT bu_name
,trunc((rowno + 2 - 1) / 2) loopsetid
FROM ( SELECT bu_name
,ROW_NUMBER()
OVER(
ORDER BY val_status
) rowno
FROM pricelist_src_tbl
WHERE val_status = 'Y'
)
) ps ON ( ps.bu_name = pt.bu_name )
WHEN MATCHED THEN UPDATE
SET pt.loopsetid = ps.loopsetid;