带有 DECODE 的 Oracle LIKE 运算符

Oracle LIKE operator with DECODE

我是 oracle 的新手,在理解语法方面遇到了一些问题。

INSERT INTO TEMP_BILL_PAY_LWDAY_PL
            WITH tmp_acc AS (
              SELECT ac_id,ac_currency,ac_category,ac_co_code
              FROM account
              WHERE ac_co_code LIKE decode(Currency,'','%','ALL','%',Currency) AND ac_category = '9986'
            )

这是 oracle pl/sql 语句,谁能告诉我这行是什么意思。

WHERE ac_co_code LIKE decode(Currency,'','%','ALL','%',Currency)

我不明白 decode 在这里用 LIKE 是什么意思。非常感谢您的帮助。

它正在即时生成搜索模式。逻辑用DECODE()决定:

  • 如果值 Currency 是空 VARCHAR (''),则使用 % 作为 LIKE 的模式。条件等同于:

    WHERE ac_co_code LIKE '%'
    
  • 否则,如果值 Currency'ALL',则使用 % 作为 LIKE 的模式。条件等同于:

    WHERE ac_co_code LIKE '%'
    
  • 否则使用 Currency 的值作为 LIKE 的模式。条件等同于:

    WHERE ac_co_code LIKE Currency
    

详情见Oracle Online Docs