-2

有人可以向我解释这段代码的含义以及它是如何工作的吗?例如我有一张桌子,学生:

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和分别是$2gname和lname的参数还是它们等于聚合函数pegar中的basetype和stype?这段代码发生了什么?

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

3 回答 3

0

我认为它将列结合到comma separated values. 所以它会返回**vi23,kola**

于 2012-12-21T07:41:44.540 回答
0

它需要两个参数并检查第一个参数长度是否大于 0,因为如果长度为 0 或小于 0,则表示根本没有参数。如果为真,则将两个参数与它们之间的逗号连接起来(与 || 运算符连接)否则它将第二个参数存储为文本

于 2012-12-21T08:59:13.877 回答
0

使用sfunc“状态”参数和下一个输入(状态参数的类型是stype设置)作为第一个和第二个(或更多...)参数($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 回答