这个Oracle语法是什么:"||''"?

oli*_*are 3 oracle syntax plsql join sqlplus

我在我们的一个遗留应用程序中遇到了一些奇怪的Oracle语法,我很感兴趣......

查询

(名称已被修改以保护无辜者)

SELECT COUNT(1) AS WEEKLYCOUNT 
FROM MONKEYS MD
WHERE 
    MD.MID||'' IN 
    (
        SELECT DISTINCT MD.MID 
        FROM MONKEYS MD, GIRAFFES GD 
        WHERE 
            (MD.MID = GD.MID(+)||'') 
            AND CURRENT_STATUS = 'Healthy' 
            AND GIRAFFE_TYPE = 'Long-necked' 
            AND INTERESTING_DATE BETWEEN 
                '22 December 2011' AND '29 December 2011'
    ) 
HAVING COUNT(MD.MID) > 0
Run Code Online (Sandbox Code Playgroud)

我不确定的是||''语法.||到目前为止,我从未见过用于Oracle中的连接.它在这里似乎没有意义......

关于这是做什么的,关于它为什么这样做以及这种语法如何工作的任何想法都会很棒.

更多信息

有趣的是,这个SQL在SQLPlus中返回以下内容:

no rows selected

Elapsed: 00:00:00.03
SQL>
Run Code Online (Sandbox Code Playgroud)

我重写了相同的SQL(减去奇怪的语法),利用我对系统的了解来生成我相当确定的相同结果:

SELECT COUNT(1) AS WEEKLYCOUNT 
FROM 
    MONKEYS MD 
    LEFT JOIN GIRAFFES GD ON GD.MID = MD.MID 
WHERE 
    AND MD.CURRENT_STATUS = 'Healthy'
    AND GD.GIRAFFE_TYPE = 'Long-necked'
    AND GD.INTERESTING_DATE BETWEEN 
        '22 December 2011' AND '29 December 2011' 
Run Code Online (Sandbox Code Playgroud)

但是,第二个查询产生(预期)以下内容:

WEEKLYCOUNT
-----------
          0

Elapsed: 00:00:00.16
SQL>
Run Code Online (Sandbox Code Playgroud)

主要区别在于,即使两个查询都在寻找a COUNT,第一个也不返回任何行......很奇怪,是吧?

(PS得到显示的经过时间,我有SET TIMING ON)

小智 7

|| 在Oracle中用于连接字符串,因此,如果你有一个非字符串类型的变量,并且你想将它转换为字符串,你可以用''连接它.