“ ORA-01427单行子查询返回多个行”,而过程中没有子查询

时间:2019-03-05 07:46:31

标签: oracle plsql

我有一个程序抛出错误“ 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。

2 个答案:

答案 0 :(得分:1)

现在,您尝试更新单行:

 SET(SLOPE_MEDIAN, SLOPE_75, SLOPE_90)

显示您的选择结果。如果您的SELECT返回50行,则ORACLE尝试将这50行放入这一行。 您在WHERE子句中缺少ID列上的某些条件

答案 1 :(得分:1)

我认为您想要一个相关的更新

MyPackages