1

我有一个以整数 [] 作为输入的 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

非常感谢您的帮助。

4

2 回答 2

11

使用array_length

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

第二个参数是您感兴趣的维度。大多数数组是一维的,因此在大多数情况下 1 是正确的值。

如果您实际上是在查找text数组中所有字符串的长度,请使用array_to_stringwith length

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

顺便说一句,您链接到的文章已有 12 年历史,似乎已完全过时。

于 2012-10-05T08:28:26.613 回答
0

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

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

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

于 2018-05-29T15:22:57.417 回答