oracle - ORA-01422: 精确提取返回的行数超过请求的行数 ORA-06512
问题描述
我尝试编写一个存储过程,使事务号每天返回到 01,但是当我运行它时,当天到 01 的所有事务号都不会增加。
然后我添加
and (V_JML_RECORD = 1) THEN
V_JML_RECORD: = V_JML_RECORD +1;
当我运行它时,ORA-01422
出现错误;请求的行数是否有准确的准确回报,可以解释并为我的问题提供解决方案?
SELECT TRIM (NAMA), TRIM (KD_KTR) AS KDKTR
INTO V_NAMA, V_KDKTR
FROM D_PRS
WHERE TRIM (STB) = P_STB;
SELECT TO_CHAR (sysdate, 'MM')
INTO V_BLNSKR
from dual;
SELECT TO_CHAR (sysdate, 'DD')
INTO V_HRSKR
from dual;
SELECT COUNT(NOKAS)
INTO V_JML_RECORD
FROM (
SELECT NOKAS,TGKAS,KTRASL FROM D_MSTHEADER_UKERJA WHERE TGKAS IN(
SELECT MAX(TGKAS) FROM D_MSTHEADER_UKERJA WHERE KTRASL=V_KDKTR)
)
IF (V_BLNSKR = '02')
AND (V_HRSKR = '27') THEN
V_JML_RECORD := 1;
ELSIF (V_BLNSKR = '02')
AND (V_HRSKR = '27')
AND (V_JML_RECORD = 1) THEN
V_JML_RECORD := V_JML_RECORD +1;
ELSE
V_JML_RECORD := V_JML_RECORD +1;
END IF;
解决方案
要立即解决您的问题,请在下面的查询中添加 ROWNUM= 1,但正确的方法是让您通过检查原始查询的结果来检查要获得的正确行。使用 INTO 函数时,您只需获取 SINGLE ROW 查询。
SELECT TRIM (NAMA), TRIM (KD_KTR) AS KDKTR
INTO V_NAMA, V_KDKTR
FROM D_PRS
WHERE TRIM (STB) = P_STB AND ROWNM = 1;
推荐阅读
- android - 使用 mapBox tile 作为 osmdroid tileSource
- vagrant - 如何使用 pybossa vagrant 分析代码
- c++ - SFML - 无法加载图像 - 无法打开文件 - LINUX
- android - 如何在非起始目的地中退出应用程序?
- ajax - 在后端使用 Laravel 将接收到的数据从 API GET 请求发送到数据库
- java - 如何清除 StringIndexOutOfBoundsException
- angular - Angular 动态形式如何绑定到变量;
- android - 应用程序无法安装 Android 9 (Pie)
- go - 在具有非常规目录结构的同一页面上提供 HTML 模板和 CSS?
- python - 使用 Keras 时,是否可以弄清楚正在调用哪些 tensorflow 方法?