Select 并允许来自对象的 Ref(null) 结果 Table
Select And Allow Ref(null) Result From Object Table
我想要 运行 一个函数,它将 select 从对象 table 到属性的引用,如果 table returns null 则该属性设置为null。为此,我尝试了代码。
select ref(t) into self_ref from my_table where objectID = self.objectID;
但是,只要 where 找不到匹配项,这就会失败。我有以下内容
select count(*)
into l_result
from my_table
where companyID = self.companyID;
if l_result > 0 then
select ref(t)
into self_ref
from my_table t
where objectID = self.objectID;
else
self_ref := null;
end if;
但我希望有更好的解决方案,不涉及太多冗余。
有什么建议吗?
常规方法(无论您是处理对象引用还是任何其他局部变量)都是
begin
select ref(t)
into self_ref
from my_table t
where objectID = self.objectID;
exception
when no_data_found
then
self_ref := null;
end;
这避免了 count(*)
returns 与后续 select
不同的结果的潜在竞争条件。从技术上讲,假设您之前从未为 self_ref
赋值,那么它已经是 null
,因此您的异常处理程序可以简单地忽略 no_data_found
异常。我更喜欢将变量显式赋值给 null
,尽管这在技术上是多余的,但是,因为它会使代码更清晰。如果您明确地设置(或保留)局部变量 null
,后续维护者不必质疑。
您也可以用其他各种方式来构造它,例如
self_ref := null;
for r in (select ref(t) my_ref
from my_table t
where objectID = self.objectID)
loop
self_ref := r.my_ref;
end loop;
但是带有异常处理程序的 select into
是最常见的,并且可以最准确地表达您的意图。
我想要 运行 一个函数,它将 select 从对象 table 到属性的引用,如果 table returns null 则该属性设置为null。为此,我尝试了代码。
select ref(t) into self_ref from my_table where objectID = self.objectID;
但是,只要 where 找不到匹配项,这就会失败。我有以下内容
select count(*)
into l_result
from my_table
where companyID = self.companyID;
if l_result > 0 then
select ref(t)
into self_ref
from my_table t
where objectID = self.objectID;
else
self_ref := null;
end if;
但我希望有更好的解决方案,不涉及太多冗余。
有什么建议吗?
常规方法(无论您是处理对象引用还是任何其他局部变量)都是
begin
select ref(t)
into self_ref
from my_table t
where objectID = self.objectID;
exception
when no_data_found
then
self_ref := null;
end;
这避免了 count(*)
returns 与后续 select
不同的结果的潜在竞争条件。从技术上讲,假设您之前从未为 self_ref
赋值,那么它已经是 null
,因此您的异常处理程序可以简单地忽略 no_data_found
异常。我更喜欢将变量显式赋值给 null
,尽管这在技术上是多余的,但是,因为它会使代码更清晰。如果您明确地设置(或保留)局部变量 null
,后续维护者不必质疑。
您也可以用其他各种方式来构造它,例如
self_ref := null;
for r in (select ref(t) my_ref
from my_table t
where objectID = self.objectID)
loop
self_ref := r.my_ref;
end loop;
但是带有异常处理程序的 select into
是最常见的,并且可以最准确地表达您的意图。