我有一个plpgsql函数,它以整数[]作为输入。
整个设置可以在这个问题中找到: Passing a record as function argument PL/pgSQL
简短版本: 我有一个从书到作者的n到m关系,有一个名为books_author的链接表。我现在有一个看起来像这样的函数:
create function f_insert_books(title varchar, isbn varchar, publisher varchar,
author_id integer[]) returns void as $$
begin
--insert book
--insert link to authors into the books_author table
end;
$$ language plpgsql;
我现在想将number_of_authors添加到书中。是否有一种简单的方法来确定author_id数组的大小,或者您是否建议将“number_of_authors int”作为输入参数传递?
我发现了这个建议,但我对这种方法的表现有点担心。所以也许有更简单/更快的东西。 http://archives.postgresql.org/pgsql-sql/2000-06/msg00169.php
非常感谢你的帮助。
答案 0 :(得分:7)
使用array_length
:
SELECT array_length( ARRAY[1,2,3], 1 );
第二个参数是你感兴趣的维度。大多数数组是1维的,所以在大多数情况下1是正确的值。
如果您实际上在寻找text
数组中所有字符串的长度,请将array_to_string
与length
一起使用:
SELECT length(array_to_string( ARRAY['a','bb','ccc'], '' ));
顺便说一下,你链接的文章是12岁,看起来完全过时了。
答案 1 :(得分:0)
还有一个函数可以获得数组的长度 - cardinality
:
SELECT cardinality(ARRAY[1,2,3]);
对于简单的一维数组,它的工作方式相同,并且不需要在array_length
函数中传递任何其他参数,例如数组维。