Oracle PL/SQL未找到数据-非连续Id值
我有一份结构如下的报告: 第1列ID、第2列批准\拒绝\状态、第3列代表\ ID 运行以下操作时,我遇到“找不到数据”错误:Oracle PL/SQL未找到数据-非连续Id值,oracle,plsql,Oracle,Plsql,我有一份结构如下的报告: 第1列ID、第2列批准\拒绝\状态、第3列代表\ ID 运行以下操作时,我遇到“找不到数据”错误: DECLARE V_REP_ID VARCHAR2(100); V_ROWS_APPROVED_min NUMBER; V_ROWS_APPROVED_max NUMBER; V_STAT VARCHAR2(100); BEGIN SELECT min(id) INTO V_ROWS_APPROVED_min FROM MY_TABLE; SEL
DECLARE
V_REP_ID VARCHAR2(100);
V_ROWS_APPROVED_min NUMBER;
V_ROWS_APPROVED_max NUMBER;
V_STAT VARCHAR2(100);
BEGIN
SELECT min(id) INTO V_ROWS_APPROVED_min FROM MY_TABLE;
SELECT max(id) INTO V_ROWS_APPROVED_max FROM MY_TABLE;
FOR i IN V_ROWS_APPROVED_min..V_ROWS_APPROVED_max LOOP
SELECT APPROVED_REJECTED_STATUS INTO V_STAT
FROM MY_TABLE WHERE MY_TABLE.ID =i;
SELECT REP_ID INTO V_REP_ID
FROM MY_TABLE
WHERE MY_TABLE.ID = i;
END LOOP;
END;
我认为这可能与ID具有非连续值有关?
我不能在报告中为功能设置连续值,也不能包含异常,因为我需要根据更改的类型执行操作
多谢各位
编辑:
感谢MT0的审核/建议!
我尝试使用游标进行循环,但发生了一些非常奇怪的事情:
for cur_m in (select id, approved_rejected_status
from bdc_bench_watchlist_t
order by id)
loop
if cur_m.approved_rejected_status = 'Approved' then
--Inserting into a test table:
insert into index_test (ID_COPY, MY_APPROVED_STATUS)
values (cur_m.id, cur_m.approved_rejected_status);
end if;
end loop;
结果显示从最小值到最大值的所有ID范围都正常,但是!approved_rejected_status列为空,只有标题显示为空,行上的数据为空。我不知道为什么。
如果我从源表中选择一个基本的select id、approved\u rejected\u status,它会带来ok id和status info ok
谢谢假设您需要遍历每个数字并执行某些操作,即使其中没有行,则只需处理“未找到数据”异常: 声明 V_REP_ID MY_TABLE.REP_ID%TYPE; V_行\u已批准\u最小我的\u表。ID%类型; V_行\u已批准\u最大我的\u表。ID%类型; V_统计我的_表。已批准_已拒绝_状态%TYPE; 开始 选择minid,maxid 分为V_行\已批准\最小值、V_行\已批准\最大值 从我的桌子上; 对于V_行中的i,批准的\u最小值..V_行中的i,批准的\u最大值循环 开始 选择已批准\已拒绝\状态、代表ID 进入V_STAT,V_REP_ID 从我的桌子上 其中MY_TABLE.ID=i; 例外 当找不到数据时 V_STAT:=NULL;-或者将默认值放在这里。 V_REP_ID:=NULL; 终止 -使用stat/rep\u id进行操作 端环; 终止
如果您不想遍历每一行,并且想跳过缺少的id值,那么可以使用光标和按id排序。谢谢!尝试使用光标,但将结果添加到问题中。你知道会发生什么吗?谢谢找到了一个不是最好的解决方法,但至少它是有效的:为where语句所需的每种情况创建一个游标。谢谢approved_rejected_status列为空,只有标题显示为空,行上的数据为空。您是说insert to INDEX_测试只填充ID_COPY,而MY_approved_status为空?一些样本数据会有很大帮助。