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)
归档时间: |
|
查看次数: |
39537 次 |
最近记录: |