我想运行一个函数,它将从对象表中选择一个ref属性,如果该表返回null,则该属性设置为null。为此,我尝试了代码。
select ref(t) into self_ref from my_table where objectID = self.objectID;
但是,无论何时找不到匹配,这都会失败。到位我有以下
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;
但我想如果有一个更好的解决方案没有涉及如此多的冗余。
有什么建议吗?
答案 0 :(得分:1)
传统方法(无论是处理对象引用还是任何其他局部变量)都是
import java.util.Scanner;
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int i = 0;
int n = 0;
//It's use to verify the inputs (i and n).
do{
System.out.print("Enter i :");
i = input.nextInt();
System.out.print("\nEnter n :");
n = input.nextInt();
if(i >= 1 || n <= 1){
System.out.println("Please enter numbers above 1 \n");
}
}while(i <= 1 || n <= 1);
System.out.print(n + " multiples of " + i + " are: ");
for (int counter = 0 ; counter < n ; counter++) {
System.out.print(i*(2 + counter) + " ");
}
}
这避免了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(*)
不同的结果的潜在竞争条件。从技术上讲,假设您之前从未为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;
将是最常见的,并且最准确地表达您的意图。