Oracle PL/SQL未找到数据-非连续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

我有一份结构如下的报告:

第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; 
    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为空?一些样本数据会有很大帮助。