检查 table 中的空值
Checking for null values in a table
我有一个 table 有几列,其中一些是:
- FILTER_COLUMN VARCHAR2
- L_FILTER_VALUEN 数字
- L_FILTER_VALUEA VARCHAR
- L_FILTER_LIST_ID 数字
我正在制作附加字符串的程序(稍后用于查询)
但有一个问题:
如果这 4 列都为空,那没关系。但是,如果 FILTER_COLUMN
不为空,我必须保证 至少其他三个中的一个 NOT 为空。
因为我在 PL/SQL 有点菜鸟所以我决定这样做 "the wrong way":
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)
是否有更简洁的方法来追加所有非空列?
根据我的想法,您有 2 个基本选项:
使用 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 函数,它将 return 第一个非空变量。如果它 returns 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)
我有一个 table 有几列,其中一些是:
- FILTER_COLUMN VARCHAR2
- L_FILTER_VALUEN 数字
- L_FILTER_VALUEA VARCHAR
- L_FILTER_LIST_ID 数字
我正在制作附加字符串的程序(稍后用于查询) 但有一个问题:
如果这 4 列都为空,那没关系。但是,如果 FILTER_COLUMN
不为空,我必须保证 至少其他三个中的一个 NOT 为空。
因为我在 PL/SQL 有点菜鸟所以我决定这样做 "the wrong way":
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)
是否有更简洁的方法来追加所有非空列?
根据我的想法,您有 2 个基本选项:
使用 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 函数,它将 return 第一个非空变量。如果它 returns 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)