如何将"数组"值传递给我的存储过程?

Ore*_*tet 14 mysql database arrays postgresql stored-procedures

我希望能够将值的"数组"传递给我的存储过程,而不是串行调用"添加值"过程.

任何人都可以建议一种方法吗?我在这里错过了什么吗?

编辑:我将使用PostgreSQL/MySQL,我还没有决定.

小智 9

正如Chris指出的那样,在PostgreSQL中没有问题 - 任何基类型(如int,text)都有自己的数组子类型,你也可以创建自定义类型,包括复合类型.例如:

CREATE TYPE test as (
    n int4,
    m int4
);
Run Code Online (Sandbox Code Playgroud)

现在您可以轻松创建测试数组:

select ARRAY[
    row(1,2)::test,
    row(3,4)::test,
    row(5,6)::test
];
Run Code Online (Sandbox Code Playgroud)

您可以编写一个函数,该函数将为数组中的每个项目乘以n*m,并返回产品总和:

CREATE OR REPLACE FUNCTION test_test(IN work_array test[]) RETURNS INT4 as $$
DECLARE
    i      INT4;
    result INT4 := 0;
BEGIN
    FOR i IN SELECT generate_subscripts( work_array, 1 ) LOOP
        result := result + work_array[i].n * work_array[i].m;
    END LOOP;
    RETURN result;
END;
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)

并运行它:

# SELECT test_test(
    ARRAY[
        row(1, 2)::test,
        row(3,4)::test,
        row(5,6)::test
    ]
);
 test_test
-----------
        44
(1 row)
Run Code Online (Sandbox Code Playgroud)


Kb.*_*Kb. 5

如果您打算使用 MySQL 5.1,则无法传入数组。
查看 MySQL 5.1 faq
如果你打算使用 PostgreSQL,可以查看这里