我有一个包含多个列的表,其中一些是:
我正在创建一个附加字符串的过程(稍后用于查询) 但有一个问题:
如果这4列中的所有列都为空,那就没问题。但是,如果FILTER_COLUMN
不为空,我必须保证其他三个中的至少一个 NOT 为空。
因为我在PL / SQL中有点不高兴,所以我决定这样做"错误的方式":
IF FILTER_COLUMN IS NOT NULL
IF L_FILTER_VALUEN IS NULL
IF L_FILTER_VALUEA IS NULL
IF L_FILTER_LIST_ID IS NULL
RETURN FALSE;
ELSE
SQL_STMT := L_FILTER_LIST_ID
END IF;
ELSE
....
(and so on)
是否有更简洁的方法并附加所有非空列?
答案 0 :(得分:1)
从我的头脑中,您有两个基本选项:
使用AND:
IF filter_column IS NOT NULL THEN
IF l_filter_valuen IS NULL AND l_filter_valuea IS NULL AND l_filter_list_id IS NULL THEN
RETURN FALSE;
ELSE
sql_stmt := l_filter_list_id;
END IF;
ELSE
....
(and so on)
使用COALESCE函数返回第一个非null变量。如果它返回NULL,则表示所有变量都为NULL:
IF filter_column IS NOT NULL THEN
IF COALESCE(l_filter_valuen, l_filter_valuea, l_filter_list_id) IS NULL THEN
RETURN FALSE;
ELSE
sql_stmt := l_filter_list_id;
END IF;
ELSE
....
(and so on)