sql - 通知错误 ORA-01422:精确提取返回的行数超过了请求的行数
问题描述
我想在表中输入变量INFORME_VENTA
。下面是我的代码:
VARIABLE B_ANIO VARCHAR2(8);
EXECUTE :B_ANIO := '042018';
DECLARE
V_CLIENTE_ID CLIENTES.CLIENTE_ID%TYPE;
V_NOMBRE_CIA CLIENTES.NOMBRE_CIA%TYPE;
V_NRO_BOLETA BOLETAS.NRO_BOLETA%TYPE;
BEGIN
LOOP
SELECT C.CLIENTE_ID , C.NOMBRE_CIA , B.NRO_BOLETA
INTO V_CLIENTE_ID , V_NOMBRE_CIA , V_NRO_BOLETA
FROM BOLETAS B JOIN ORDENES O JOIN CLIENTES C
ON (C.CLIENTE_ID = O.ORDEN_ID)
ON (B.NRO_BOLETA = O.ORDEN_ID);
INSERT INTO INFORME_VENTA
VALUES(:B_ANIO , V_CLIENTE_ID , V_NOMBRE_CIA , V_NRO_BOLETA);
END LOOP;
END;
我想将变量放在informe_venta
表中,但出现以下错误
Informe de error -
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 11
01422. 00000 - "exact fetch returns more than requested number of rows"
*Cause: The number specified in exact fetch is less than the rows returned.
*Action: Rewrite the query or change number of rows requested
解决方案
为什么使用 PL/SQL?一个简单INSERT
的能够完成整个工作:
insert into informe_venta
select :b_anio, c.cliente_id , c.nombre_cia , b.nro_boleta
from boletas b join ordenes o
on b.nro_boleta = o.orden_id
join clientes c
on c.cliente_id = o.orden_id;
(在 SQL*Plus 中,您将使用 & 号引用 B_ANIO 变量&b_anio
)。
如果它必须是PL/SQL,请将上面的内容附INSERT
入BEGIN-END
并运行它。再一次:你不需要循环。
还有一点:我建议您命名要插入的列,例如
insert into informe_venta (anio, cliente_id, nombre_cia, nro_boleta)
select ...
推荐阅读
- angular2-nativescript - 如何通过 PKCE 将 NativeScript Angular android 移动应用程序与 Okta Auth 流程集成
- c++ - 需要在带有 Visual Studio 的 Windows 上使用 Xerces-C++ 3 的示例 CMake 项目
- php - 无法将 cloudflare 与 iphub.info 一起使用
- javascript - 以角度 8 在表单数组中设置值
- node.js - 为什么 Firebase Firestore 计数读取操作而我只是添加新文档?
- scala - 解析表单 URL 编码请求到案例类
- matlab - 如何使用 App Designer 中的下拉组件加载单独的 .mat 文件?
- python - 在python中获取空的CSV
- python - 如何正确运行Watchdog的RegexMatchingEventHandler?
- python - Django 如何生成短随机 slug?