确定输入数组plpgsql的大小

tar*_*aki 0 postgresql plpgsql

我有一个plpgsql函数,它接受一个整数[]作为输入.

整个设置可以在这个问题中找到: 将记录作为函数参数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;
Run Code Online (Sandbox Code Playgroud)

我现在想在书中添加number_of_authors.有没有一种简单的方法来确定author_id数组的大小,或者您是否会建议将"number_of_authors int"作为输入参数传递?

我发现了这个建议,但我对这种方法的表现有点担心.所以也许有更简单/更快的东西. http://archives.postgresql.org/pgsql-sql/2000-06/msg00169.php

非常感谢您的帮助.

Cra*_*ger 7

用途array_length:

SELECT array_length( ARRAY[1,2,3], 1 );
Run Code Online (Sandbox Code Playgroud)

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

如果你其实找一个在所有的字符串的长度text数组,使用array_to_string具有length:

SELECT length(array_to_string( ARRAY['a','bb','ccc'], '' ));                                                                                                         
Run Code Online (Sandbox Code Playgroud)

BTW,你链接的文章是12岁,看起来完全过时了.