确定输入数组plpgsql的大小

时间:2012-10-05 08:01:42

标签: postgresql plpgsql

我有一个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

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:7)

使用array_length

SELECT array_length( ARRAY[1,2,3], 1 );

第二个参数是你感兴趣的维度。大多数数组是1维的,所以在大多数情况下1是正确的值。

如果您实际上在寻找text数组中所有字符串的长度,请将array_to_stringlength一起使用:

SELECT length(array_to_string( ARRAY['a','bb','ccc'], '' ));                                                                                                         

顺便说一下,你链接的文章是12岁,看起来完全过时了。

答案 1 :(得分:0)

还有一个函数可以获得数组的长度 - cardinality

SELECT cardinality(ARRAY[1,2,3]);

对于简单的一维数组,它的工作方式相同,并且不需要在array_length函数中传递任何其他参数,例如数组维。