我想在oracle sql查询中连接多个(3)列。目前我正在使用函数concat
。
有人建议使用||
代替concat
,因为它可以带来性能优势。
这是真的吗?如果是,为什么?
我只看到了||的好处是书面查询更具可读性。
答案 0 :(得分:7)
我设置了一个简单的PL / SQL脚本(下面),在每个循环中尝试两个串联选项。 ||
的结果为142.93秒,CONCAT
的结果为144.11秒。无论哪种方式,你都在谈论每次操作大约1.4微秒。我的结论是,似乎没有任何可观的性能差异。
除了更具可读性之外,||
是串联运算符的ANSI标准。
DECLARE
i NUMBER;
j NUMBER := 100000000;
v VARCHAR2 (1000);
v_start TIMESTAMP := SYSTIMESTAMP;
BEGIN
FOR i IN 1 .. j LOOP
v := DBMS_RANDOM.VALUE () || DBMS_RANDOM.VALUE ();
END LOOP;
DBMS_OUTPUT.put_line ('1: ' || (SYSTIMESTAMP - v_start));
END;
DECLARE
i NUMBER;
j NUMBER := 100000000;
v VARCHAR2 (1000);
v_start TIMESTAMP := SYSTIMESTAMP;
BEGIN
FOR i IN 1 .. j LOOP
v := CONCAT (DBMS_RANDOM.VALUE (), DBMS_RANDOM.VALUE ());
END LOOP;
DBMS_OUTPUT.put_line ('2: ' || (SYSTIMESTAMP - v_start));
END;
作为脚注,Oracle说明CONCAT
函数的用途:
在具有不同系统的系统之间移动SQL脚本文件时 字符集,例如ASCII和EBCDIC之间,垂直条可能 不能转换为目标Oracle所需的垂直条 数据库环境。 Oracle提供CONCAT字符函数 对于垂直条形操作符的替代方法 难以或无法控制通过操作执行的翻译 系统或网络实用程序。在应用程序中使用此功能 将在具有不同字符集的环境之间移动。
答案 1 :(得分:3)
两者都是相同的,CONCAT()
用于支持SQL脚本处理的不同字符集,其中'||'
可能被错误地解释。
在大多数平台上,连接运算符是两个实心垂直 条形图,如表4-3所示。但是,一些IBM平台使用了破解 此运算符的垂直条。在两者之间移动SQL脚本文件时 具有不同字符集的系统,例如ASCII和 EBCDIC,垂直条可能无法转换为垂直条 目标Oracle数据库环境所需的。 Oracle提供 CONCAT字符函数作为垂直条的替代 对于难以或无法控制的情况的操作员 由操作系统或网络实用程序执行的转换。使用 此功能在将在环境之间移动的应用程序中 具有不同的字符集。