1

integer[]を入力として受け取るplpgsql関数があります。

セットアップ全体は、次の質問にあります。 関数の引数PL/pgSQLとしてレコードを渡す

短いバージョン:books_authorというリンクテーブルを使用して、本から著者までn対mの関係があります。これで、次のような関数ができました。

    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_authorsint」を入力パラメーターとして渡すことをお勧めしますか?

私はこの提案を見つけましたが、このアプローチのパフォーマンスについて少し心配しています。だから多分もっと簡単/速いものがあるでしょう。 http://archives.postgresql.org/pgsql-sql/2000-06/msg00169.php

ご助力ありがとうございます。

4

2 に答える 2

11

使用array_length

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

2番目のパラメーターは、関心のある次元です。ほとんどの配列は1次元であるため、ほとんどの場合、1が適切な値です。

実際に配列内のすべての文字列の長さを探している場合は、次のコマンドtextを使用array_to_stringしてlengthください。

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

ところで、あなたがリンクした記事は12年前のものであり、完全に時代遅れに見えます。

于 2012-10-05T08:28:26.613 に答える
0

配列の長さを取得する関数がもう1つあります- cardinality

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

単純な1次元配列の場合と同じように機能し、関数で配列次元などの追加のパラメーターを渡す必要はありませんarray_length

于 2018-05-29T15:22:57.417 に答える