sql - COALESCE 接受多少个参数?

标签 sql oracle coalesce

我在 SO 中找不到它,并且认为在这里找到它可能是值得的,因为 oracle 文档没有指定它。

http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions023.htm

最佳答案

在 Oracle 10g 上测试。

DECLARE
    cur SYS_REFCURSOR;
    vQuery VARCHAR2(32000) := 'SELECT COALESCE(:NULLS) FROM dual';
    vNulls VARCHAR2(32000) := '1, 1';
    i PLS_INTEGER := 2;
BEGIN
    LOOP
        OPEN cur FOR REPLACE (vQuery, ':NULLS', vNulls);
        CLOSE cur;

        i := i + 1;
        vNulls := vNulls || ', 1';
    END LOOP;
    EXCEPTION
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE(i || ' ' || SQLERRM);
END;

256 ORA-00939: too many arguments for function

所以,答案是256

编辑: 正如 Bob Duell 所建议的那样:

SELECT func_id, name, minargs, maxargs 
FROM V$SQLFN_METADATA
WHERE name = 'COALESCE'

FUNC_ID NAME        MINARGS MAXARGS 
387     COALESCE    2       0   

:(

编辑:

11.2.0.3 的限制似乎是 65,535。

上面的脚本不能处理那么多的参数。您可以使用如下脚本创建并运行非常大的 SQL 语句来测试限制。

--Create a COALESCE with 65,536 functions.
--It will fail with: ORA-00939: too many arguments for function
--But if you remove the last argument it will work, at least on 11.2.0.3.
--WARNING: Sending this much data through DBMS_OUTPUT may freeze some tools.
begin
    dbms_output.put_line('select coalesce(');
    for i in 1 .. 6553 loop
        dbms_output.put_line('1,2,3,4,5,6,7,8,9,0,');
    end loop;
    dbms_output.put_line('1,2,3,4,5,6');
    dbms_output.put_line(') from dual;');
end;
/

关于sql - COALESCE 接受多少个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13898362/

相关文章:

sql - Rails 5.2 更改或删除表列时出错(SQLite3::ConstraintException:FOREIGN KEY 约束失败:DROP TABLE)

java - 获取 'java.security.cert.CertPathValidatorException: timestamp check failed' 但证书未过期并且在其他服务器上工作

php - 选择第一个 NOT NULL 列,然后获取该列的名称

MySQL 优化 UNION 查询

php - 绑定(bind)多个参数匹配全文搜索

SQL 在多个表中选择每个连接表中的最大日期

c# - Oracle PL/SQL COALESCE 函数的 C# 等价物是什么?

sql - 替换每个分区的 NULL 值

sql - Oracle SQL 表历史记录

linux - 如何使用 VNC Viewer 在没有 X 的情况下将 Oracle 12c 安装到数据库?