oracle - Oracle 11 PL/SQL:检查变量是否为空、空字符串和无结果
问题描述
使用 PL/SQL,我执行一个 SELECT INTO 语句,基于我想要执行相同逻辑的结果。我想检查:
- 无结果(返回 0 行)
- 空结果(返回 '' 的 1 行)
- null 结果(1 行返回 null)
在我当前的解决方案中,我对案例 1 使用 NO_DATA_FOUND 异常,对案例 2+3 使用 IF 检查,但以任何一种方式调用相同的逻辑,我不喜欢:
BEGIN
SELECT some_value
INTO my_variable
FROM some_table
WHERE somecheck = 123
IF my_variable IS NULL OR my_variable = ''
THEN
##perform logic##
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
##perform same logic as above##
END;
这是否可以更好地解决,以防止我必须为我的 IF 检查和我的异常复制粘贴相同的代码?
特别是,扩展我的 IF 检查是否安全
IF SQL%ROWCOUNT = 0 THEN ...
而不是使用 NO_DATA_FOUND 异常来实现我的目标?
解决方案
如果您聚合some_value
,那么您将不会得到NO_DATA_FOUND
,因此您可以省略该异常处理程序。NULL
和''
是相同的,所以代码可以缩短为
select max(some_value) into my_variable ...
if my_variable is null then
##perform logic##
end if;
推荐阅读
- angular - patchValue 只是不起作用!有什么作用?
- rust - 如何在 Rust 中将 u8 转换为 &[u8]?
- go - 无法将本地包调用到 main
- java - 动态规划 - 具有最大切割和实际解决方案的棒切割问题
- python - 刽子手代码无法访问其他文件
- javafx - 我如何处理位于 JavaFX 中另一个按钮中的按钮单击?
- discord - Discord SDK:lobbyManager.ConnectLobby() 返回 NotFound
- javascript - 套接字返回“[对象对象]”
- r - rowSums 仅对子集数据框中的正值进行求和
- c# - 如何访问 Listvew ItemsPanelTemplate 和 DataTemplate 中的属性