簡體   English   中英

如何在PostgreSQL中將自定義類型的多維數組作為函數參數傳遞?

[英]How to pass custom typed multi-dimmensional array as a function parameter in PostgreSQL?

我做了一個簡單的自定義類型:

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構造函數來調用該方法的語法。

您的代碼中有錯誤:

對行/記錄類型常量使用圓括號

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

在函數名稱中添加雙引號:

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

對字符串常量使用單引號:

RETURN 'contact!';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM