gpt4 book ai didi

Oracle 相当于 Java 的 Varargs

转载 作者:行者123 更新时间:2023-12-04 13:23:28 27 4
gpt4 key购买 nike

我正在尝试创建一个 PL/SQL 过程,它可以处理未知但相对较少的字符串/Varchar2 作为参数的数量。 Java 中的等价物可能是使用 Varargs:

public void foo(String... bar) {
}

看甲骨文的 documentation on Collections and Records使用关联数组似乎是一个合适的选择,但我不确定。

你能告诉我关联数组是否是正确的方法吗?

在调用过程时是否可以传入匿名关联数组?

谢谢

最佳答案

你至少有 3 个选择:

  • (标准)使用关联数组作为过程参数
  • 定义“足够”数量的可选形式参数
  • 使用带有定义的分隔符 char
  • 的单个 varchar 参数

    示例代码 1.)
    TYPE t_map IS TABLE OF VARCHAR2(50) INDEX BY VARCHAR2(20);

    CREATE OR REPLACE PROCEDURE demo_1 ( vararg IN t_map ) IS
    BEGIN
    /* whatever */
    NULL;
    END demo_1;

    /* ... somewhere else ... */
    my_var t_map;

    my_var('first') := 'this';
    my_var('next') := ' is a ';
    my_var('last') := 'demo';

    demo_1 ( my_var );
    /* ... */

    示例代码 2.)(最多 5 个参数)
    CREATE OR REPLACE PROCEDURE demo_2 (
    vararg1 IN VARCHAR2 DEFAULT NULL
    , vararg2 IN VARCHAR2 DEFAULT NULL
    , vararg3 IN VARCHAR2 DEFAULT NULL
    , vararg4 IN VARCHAR2 DEFAULT NULL
    , vararg5 IN VARCHAR2 DEFAULT NULL
    ) IS
    BEGIN
    /* whatever */
    NULL;
    END demo_2;

    /* ... somewhere else ... */
    demo_2 ( 'this', ' is a ', 'demo' );
    /* ... */

    示例代码 3.)(特殊字符为 ';' - 不得出现在有效载荷数据中)
    CREATE OR REPLACE PROCEDURE demo_3 (
    vararg IN VARCHAR2
    ) IS
    l_arg2 VARCHAR2(50);
    l_arg5 VARCHAR2(50);
    BEGIN
    l_arg2 := SUBSTR(REGEXP_SUBSTR(vararg, ';[^;]*', 1, 2), 2);
    l_arg5 := SUBSTR(REGEXP_SUBSTR(vararg, ';[^;]*', 1, 5), 2);
    /* whatever */
    END demo_3;

    /* ... somewhere else ... */
    demo_3 ( ';this; is a ;demo;;really!;' );
    /* ... */

    关于Oracle 相当于 Java 的 Varargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16538619/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com