检查表

时间:2015-05-20 17:43:56

标签: plsql isnull

我有一个包含多个列的表,其中一些是:

  • FILTER_COLUMN VARCHAR2
  • L_FILTER_VALUEN NUMBER
  • L_FILTER_VALUEA VARCHAR
  • L_FILTER_LIST_ID NUMBER

我正在创建一个附加字符串的过程(稍后用于查询) 但有一个问题:

如果这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)

是否有更简洁的方法并附加所有非空列?

1 个答案:

答案 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)