我正在尝试将记录插入表中TB_DET_SUSCRIPCION_DOC
,但SELECT
它返回多条记录。
错误如下。
错误报告:SQL 错误:ORA-01427:单行子查询返回多于一行 01427. 00000 -“单行子查询返回多于一行”
查询:
INSERT INTO cuentas.TB_DET_SUSCRIPCION_DOC (id_det_suscripcion_doc, id_suscripcion_doc, id_tip_producto, rango_envio)
VALUES (SQ_DET_SUSCRIPCION_DOC.NextVal,(SELECT cuentas.tb_suscripcion_doc.id_suscripcion_doc
FROM cuentas.TB_SUSCRIPCION_DOC WHERE TRUNC(fec_inicio_envio,'DD') BETWEEN to_date('01-07-2016', 'DD-MM-YYYY') AND to_date('31-07-2016', 'DD-MM-YYYY')
AND cuentas.tb_suscripcion_doc.id_tip_doc_susc = 23
AND cuentas.tb_suscripcion_doc.fec_termino_envio is null), 0,0);
有人遇到过这个问题吗?你能告诉我怎么解决吗?
您使用的结构:
插入Table(Fields)值(x,y);
它用于插入单个记录。
正如错误消息明确指出的那样,您的问题是您执行的子查询返回多个记录,在这种情况下,Oracle 将不知道哪些记录是相关的,因此返回错误。
您的案例有两种可能的解决方案:
子查询返回单个记录
由于有几个,进一步细化 where 子句,使其只返回一个。如果返回多个是正确的并且决定是任意的,您可以强制引擎返回单个记录,例如:
插入所有返回值
另一方面,如果语句是正确的,并且您想要为每个返回值插入一条记录,请将构造更改为
insert
/select
,如下所示:此构造将插入与查询返回一样多的行。
使用静态值作为选择假列的一部分