oracle - “ORA-01427 单行子查询返回多于一行”,过程中没有子查询
问题描述
我有一个抛出错误“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。
解决方案
现在你试图更新单行:
SET(SLOPE_MEDIAN, SLOPE_75, SLOPE_90)
与您的选择结果。如果您的 SELECT 返回 50 行,则这 50 行 ORACLE 会尝试放入这一行。您在 WHERE 子句中缺少 ID 列的一些条件
推荐阅读
- mysql - 警告:mysql_connect():无法通过套接字连接到本地 MySQL 服务器
- go - Golang proto 文件管理和导入
- c - 在 C 中,如何从字符串中取出两个字符,并将它们分配为自己的字符串?
- python - mongodb 连接字符串 uri 在 Kubernetes 中不起作用
- azure - Azure Devops - 将用户添加到组织而不分配项目集合管理员
- android - 如何在android中控制添加视图?
- javascript - 在 forEach 循环 Javascript NodeList 中链接事件处理程序
- mysql - AWS,尝试与 RDS 建立连接时的错误消息含义
- elastic-stack - Filebeat 中未显示自定义字段名称
- javascript - 我想在手机上操作时取消该属性