如何在PostgreSQL中传递自定义类型的多维数组作为函数参数?

时间:2016-03-04 18:27:37

标签: arrays postgresql function

我做了一个简单的自定义类型:

CREATE TYPE public."FriendDetails" AS
   ("Email" character varying,
    "Name" character varying);
ALTER TYPE public."FriendDetails"
  OWNER TO postgres;

要在以下函数中使用(它只返回一个字符串 - contact!):

CREATE OR REPLACE FUNCTION public."addFriend"(
    "GroupName" character varying,
    friends "FriendDetails"[])
  RETURNS character varying AS
$BODY$BEGIN
    RETURN "contact!";
END;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public."addFriend"(character varying, "FriendDetails"[])
  OWNER TO postgres;

上面的代码是使用pgAdminIII生成的。

我试着按如下方式查询:

select addFriend('Champs',ARRAY[['qwe','asd'],['zxc','rty']]::public."FriendDetails"[]);

出了错误:

ERROR:  malformed record literal: "qwe"
LINE 1: select addFriend('Champs',ARRAY[['qwe','asd'],['zxc','rty']]...
                                         ^
DETAIL:  Missing left parenthesis.
********** Error **********

ERROR: malformed record literal: "qwe"
SQL state: 22P02
Detail: Missing left parenthesis.
Character: 34

我尝试用大括号({})代替,并丢失ARRAY,但似乎没有任何效果 - 它们会导致语法错误。

有人可以通过使用(1)花括号和(2)使用ARRAY构造函数来显示语法应如何调用此方法。

1 个答案:

答案 0 :(得分:1)

您的代码中存在错误:

Use round brackets for row/record types constants

ARRAY[('qwe','asd'),('zxc','rty')]

将双引号添加到函数名称:

select "addFriend"('Champs',ARRAY[('qwe','asd'),('zxc','rty')]::public."FriendDetails"[]);

对字符串常量使用单引号:

RETURN 'contact!';