Sql 在for循环中选择包含case语句的变量
foo变量应该在for循环中用select case填充,然后输出。我在异常中使用了goto end_循环引用,因此循环可以继续。 在我设置异常之前,我有一个ORA-01403错误。现在我有一个ORA-01422错误。另一个选择没有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
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;