合理选择。。。针对多行或无行的情况,将其导入Oracle解决方案
我只想从过程内部将值选择到变量中 选择blah1、blah2进入var1、var2_ 从 有时大型复杂查询将没有行,有时它将有多个行-这两种情况都会导致异常。我很想用类似于以下内容的隐式行为替换异常行为: 无行=无值更改,多行=最后使用 对于多行的情况,我可以很容易地约束结果集,但是对于无法在SELECT中使用聚合函数的情况,没有行要困难得多合理选择。。。针对多行或无行的情况,将其导入Oracle解决方案,oracle,Oracle,我只想从过程内部将值选择到变量中 选择blah1、blah2进入var1、var2_ 从 有时大型复杂查询将没有行,有时它将有多个行-这两种情况都会导致异常。我很想用类似于以下内容的隐式行为替换异常行为: 无行=无值更改,多行=最后使用 对于多行的情况,我可以很容易地约束结果集,但是对于无法在SELECT中使用聚合函数的情况,没有行要困难得多 有什么特别的解决办法或建议吗?希望避免在执行SELECT INTO之前显著重写查询或执行两次以获取行数。使用异常块有什么问题 create or re
有什么特别的解决办法或建议吗?希望避免在执行SELECT INTO之前显著重写查询或执行两次以获取行数。使用异常块有什么问题
create or replace
procedure p(v_job VARCHAR2) IS
v_ename VARCHAR2(255);
begin
select ename into v_ename
from (
select ename
from scott.emp
where job = v_job
order by v_ename desc )
where rownum = 1;
DBMS_OUTPUT.PUT_LINE('Found Rows Logic Here -> Found ' || v_ename);
EXCEPTION WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No Rows found logic here');
end;
SQL> begin
p('FOO');
p('CLERK');
end; 2 3 4
5 /
No Rows found logic here
Found Rows Logic Here -> Found SMITH
PL/SQL procedure successfully completed.
SQL>
使用异常块有什么问题
create or replace
procedure p(v_job VARCHAR2) IS
v_ename VARCHAR2(255);
begin
select ename into v_ename
from (
select ename
from scott.emp
where job = v_job
order by v_ename desc )
where rownum = 1;
DBMS_OUTPUT.PUT_LINE('Found Rows Logic Here -> Found ' || v_ename);
EXCEPTION WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No Rows found logic here');
end;
SQL> begin
p('FOO');
p('CLERK');
end; 2 3 4
5 /
No Rows found logic here
Found Rows Logic Here -> Found SMITH
PL/SQL procedure successfully completed.
SQL>
您可以使用for循环。for循环不会对没有返回的行执行任何操作,如果有多行,则会应用于返回的每一行。您可以调整选择,使其仅返回最后一行
begin
for ARow in (select *
from tableA ta
Where ta.value = ???) loop
-- do something to ARow
end loop;
end;
您可以使用for循环。for循环不会对没有返回的行执行任何操作,如果有多行,则会应用于返回的每一行。您可以调整选择,使其仅返回最后一行
begin
for ARow in (select *
from tableA ta
Where ta.value = ???) loop
-- do something to ARow
end loop;
end;
您还可以将查询声明为游标、打开它、提取一次并检查%found属性。您还可以将查询声明为游标、打开它、提取一次并检查%found属性。