在Db2中运行相同的查询,但在oracle中它给出了错误。 请帮忙。提前谢谢。
delete from (SELECT
EMP_ID,
SAL,
ROW_NUMBER() OVER (PARTITION BY EMP_ID ORDER BY SAL DESC) As RN
FROM FPM.FACT_PL_BS
WHERE MEASUREMENT_PERIOD_ID=20170811
AND SCENARIO_ID=1) A where RN>1}
答案 0 :(得分:0)
视图不得包含以下任何构造:
- 设置运算符
- DISTINCT运算符
- 汇总或分析功能
- GROUP BY,ORDER BY,MODEL,CONNECT BY或START WITH子句
- SELECT列表中的集合表达式
- SELECT列表中的子查询
- 指定为WITH READ ONLY的子查询
- 加入,但有一些例外情况,如“Oracle数据库管理员指南”中所述。
ROW_NUMBER
是Analytic Function,因此不允许更新。
我认为这个应该有效(未经测试):
delete from FPM.FACT_PL_BS
WHERE ROWID =ANY
(SELECT ROW_ID
FROM
(SELECT ROWID as ROW_ID,
EMP_ID,
SAL,
ROW_NUMBER() OVER (PARTITION BY EMP_ID ORDER BY SAL DESC) As RN
FROM FPM.FACT_PL_BS
WHERE MEASUREMENT_PERIOD_ID=20170811
AND SCENARIO_ID=1)
WHERE RN > 1;
或者
delete from FPM.FACT_PL_BS
WHERE MEASUREMENT_PERIOD_ID=20170811
AND SCENARIO_ID=1
AND ROWID <>ALL
(select MAX(ROWID) KEEP (DENSE_RANK FIRST ORDER BY SAL) OVER (PARTITION BY EMP_ID)
FROM FPM.FACT_PL_BS)