我有一个程序抛出错误“ ORA-01427:单行子查询返回多个行”。当我将statemt用作简单的SELECT时,每个ID会得到1行。
我研究了ORA-01427,但是我无法真正将答案应用于错误,因为据我了解,我没有子查询。
CREATE OR REPLACE PROCEDURE CALC_SLOPE (TBL_NAME IN VARCHAR2) AS
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE '||TBL_NAME||' ADD (SLOPE_MEDIAN NUMBER(2,2),
SLOPE_75 NUMBER(2,2),
SLOPE_90 NUMBER(2,2))';
EXECUTE IMMEDIATE 'UPDATE '||TBL_NAME||' a1 SET(SLOPE_MEDIAN, SLOPE_75, SLOPE_90)
=(
SELECT ROUND(MEDIAN(b.SLOPE),2) AS SLOPE_MEDIAN,
ROUND(PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY b.slope DESC),2) AS SLOPE_75,
ROUND(PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY b.slope DESC),2) AS SLOPE_90
FROM '||TBL_NAME||' a2,
bbx_slope b
WHERE SDO_CONTAINS(a2.GEOMETRY, b.POINT) = ''TRUE''
GROUP BY a2.ID
)';
END CALC_SLOPE;
错误的原因在哪里,如何解决?
我正在ORACLE 12c企业版上使用WINDOWS 10。
答案 0 :(得分:1)
现在,您尝试更新单行:
SET(SLOPE_MEDIAN, SLOPE_75, SLOPE_90)
显示您的选择结果。如果您的SELECT返回50行,则ORACLE尝试将这50行放入这一行。 您在WHERE子句中缺少ID列上的某些条件
答案 1 :(得分:1)
我认为您想要一个相关的更新
MyPackages