Sql 在for循环中选择包含case语句的变量

Sql 在for循环中选择包含case语句的变量,sql,oracle,plsql,Sql,Oracle,Plsql,foo变量应该在for循环中用select case填充,然后输出。我在异常中使用了goto end_循环引用,因此循环可以继续。 在我设置异常之前,我有一个ORA-01403错误。现在我有一个ORA-01422错误。另一个选择没有case语句,效果很好 declare foo varchar2(2000); BEGIN FOR rec IN (SELECT something FROM somewhere) LOOP BEGIN S

foo变量应该在for循环中用select case填充,然后输出。我在异常中使用了goto end_循环引用,因此循环可以继续。 在我设置异常之前,我有一个ORA-01403错误。现在我有一个ORA-01422错误。另一个选择没有case语句,效果很好

declare
foo varchar2(2000); 
BEGIN   
   FOR rec IN (SELECT something FROM somewhere)  
    LOOP
        BEGIN
          Select case when attribute = 'something' then '1' end into foo from somewhere where some_condition;   
          DBMS_OUTPUT.put_line( 'Something' || foo);     
          EXCEPTION
           WHEN NO_DATA_FOUND THEN
               foo := NULL;
               goto end_loop;     
        END;
        <<end_loop>>
        null;
    END LOOP; 
END;
谢谢NikNik的帮助

您的问题不是这种情况,而是您的WHERE条件正在重新调用找到的1条或0条以上记录

有关更多详细信息,请参阅

在第二种情况下,您可以执行以下操作:


当属性='something'然后'1'从某个条件循环的某个地方结束为FOO时,SELECT情况下的rec如何?循环标记在循环内。它现在跳到了它最终会到达的地方。您可以在您的应用程序中显示为数据吗table@Wernfried,我不能这么做。@Bennet很遗憾,出于数据保护的原因,我不能这么做。@SushiBlyat,你的评论很奇怪。为什么不能重新编写SELECT语句?你应该能够提供一些更真实的假数据,然后你会得到适当的帮助。怎么会呢?它在循环之外工作。循环中的其他选择具有相同的where条件和不同的值。where条件中的不同值可以更改结果。尝试将案例放入工作选择中,当我将案例放入第一个工作选择中时,cycleORA-01403的第一个1可能会再次出现错误。你的建议是什么?你可能没有任何记录。查看我的updateselect nvlselect案例,当kurztext='Something',然后从kg_eintrage中的'1'结束,其中kontext=rec.kg_id,kgtitel_nr=xxxxxx f,'NOT_FOUND'从dual输入到某个变量中;你是说像这样?
declare
opdatum varchar2(2000);  
opdiagnose varchar2(2000);  
d_op varchar2(2000); 
some_variable varchar2(2000); 
BEGIN   
   FOR rec IN (SELECT p.name, p.vorname, p.geburtsdatum, a.kis_id, kg.kg_id FROM kg_eintraege kg
   INNER JOIN aufenthalte a
   ON kg.patient_nr = a.patient_nr
   and kg.fall_nr = a.fall_nr
   INNER JOIN personen p
   ON a.patient_nr = p.pat_nr
   WHERE kg.kgtitel_nr = xxxxxxa
   and a.kis_id = xxxxxxb)  
    LOOP
        BEGIN
          Select kurztext into opdatum from kg_eintraege where kontext = rec.kg_id and kgtitel_nr = xxxxxxc;  
          Select text into opdiagnose from kg_eintraege where kontext = rec.kg_id and kgtitel_nr = xxxxxxd;  
          Select text into d_op from kg_eintraege where kontext = rec.kg_id and kgtitel_nr = xxxxxxe; 
          Select case when kurztext = 'Something' then '1' end into some_variable  from kg_eintraege where kontext = rec.kg_id and kgtitel_nr = xxxxxxf;   
          DBMS_OUTPUT.put_line(rec.name || '    ' || rec.vorname || '    ' || TO_CHAR(rec.geburtsdatum, 'DD.MM.YYYY')
          || '    ' || rec.kis_id || '    ' ||  opdatum|| '    ' || opdiagnose || 
           '    ' || d_op || '    ' || some_variable 
          );     
          EXCEPTION
           WHEN NO_DATA_FOUND THEN
               some_variable := NULL;
               goto end_loop;     
        END;
        <<end_loop>>
        null;
    END LOOP; 
END;
 select nvl((select case when kurztext = 'Something' then '1' end from kg_eintraege where kontext = rec.kg_id and kgtitel_nr = xxxxxxf and kurztext = 'Something'), 'NOT_FOUND') into some_variable from dual 
select  nvl(  (your_case),  'NOT_FOUND'  )  into  foo  from dual;