-2

このコードが何を意味し、どのように機能するかを誰かに説明してもらえますか? たとえば、テーブル STUDENTS があります。

gname   lname
-------------
vi23    kola
vi34    red 

この連結関数コードは、テーブルに関連してどのように機能しますか?

CREATE FUNCTION concat (text, text) RETURNS text AS $$
DECLARE
t text;
BEGIN
IF character_length($1) > 0 THEN
t = $1 ||', '|| $2;
ELSE
t = $2;
END IF;
RETURN t;
END;
$$ LANGUAGE plpgsql;

CREATE AGGREGATE pegar (
sfunc = concat,
basetype = text,
stype = text,
initcond = ''
);

$1とは$2それぞれ gname と lname のパラメーターですか、それとも集約関数 pegar の basetype と stype と同じですか? このコードでは何が起こっていますか?

IF character_length($1) > 0 THEN
    t = $1 ||', '|| $2;
    ELSE
    t = $2; 
4

3 に答える 3

0

集計のsfuncは、「状態」引数と次の入力 (状態引数の型はstype設定) を最初と 2 番目 (またはそれ以上) の引数 ($1 と $2) として呼び出されます。

したがって、これは、新しい値を集約するための状態遷移が既存の状態に追加される集約を定義します (定義されている場合)。

これらが列にどのようにマップされるかは、表示されていない集計の呼び出し方法によって異なります。しかし、そうすると、次のようになりますselect pegar(lname) from t

state= next=kola : output=kola
state=kola next=red : output=kola, red

定義されていないfinalfunc場合、集計の出力は最後の状態になります。kola, red

集計関数の説明: http://www.postgresql.org/docs/current/static/sql-createaggregate.html

于 2012-12-21T14:59:48.683 に答える
0

列を に結合すると思いますcomma separated values。だから返ってくる**vi23,kola**

于 2012-12-21T07:41:44.540 に答える
0

2 つの引数を取り、最初の引数の長さが 0 より大きいかどうかをチェックします。これは、長さが 0 または 0 より小さい場合、引数がまったくないことを意味するためです。true の場合、2 つの引数をカンマで連結します ( || 演算子で連結します) そうでない場合は、2 番目の引数をテキストとして格納します

于 2012-12-21T08:59:13.877 に答える