创建声明预定义文本数组的函数

时间:2014-07-24 15:45:32

标签: arrays function postgresql plpgsql declare

我需要在Postgres中创建一个函数,我声明的其中一个变量是预定义的文本数组,但我不知道设置其值的语法。这就是我到目前为止所做的:

CREATE OR REPLACE FUNCTION testFunction() RETURNS text
AS $$
DECLARE
    TESTARRAY TEXT['value 1', 'value 2', 'value 3'];
BEGIN
    return 'any text';
END;
$$ LANGUAGE 'plpgsql';

执行代码时出现此错误:

ERROR:  syntax error at or near "'value 1'"
LINE 5: TESTARRAY TEXT['value 1', 'value 2', 'value 3'];

2 个答案:

答案 0 :(得分:8)

默认值的正确语法(在variable declaration中)为{ DEFAULT | := } expression

对于expression,您可以使用array inputs中的任何一个。

F.ex。这些可以工作:

DECLARE
  test1  TEXT ARRAY  DEFAULT  ARRAY['value 1', 'value 2', 'value 3'];
  test2  TEXT[]      :=       '{"value 1", "value 2", "value 3"}';
  test3  TEXT[]      DEFAULT  ARRAY[]::TEXT[]; -- empty array-constructors need a cast

答案 1 :(得分:2)

@pozs已经给出了正确答案。

此外,如果对正确的语法有疑问,可以向Postgres询问字符串文字

test=# SELECT ARRAY['value 1', 'value 2', 'value 3'];
              array
---------------------------------
 {"value 1","value 2","value 3"}

test=# SELECT  ARRAY['foo', 'bar', 'b A "Z'];
        array
---------------------
 {foo,bar,"b A \"Z"}

每种类型的每个可能值都有一个字符串表示。

要获得易于引用的版本,该版本处理所有可能的极端情况,请将其打包在quote_nullable()中:

test=# SELECT quote_nullable(ARRAY['value 1', 'value 2', 'value 3']);
          quote_nullable
-----------------------------------
 '{"value 1","value 2","value 3"}'

test=# SELECT quote_nullable(ARRAY['foo', 'bar', 'b ''A'' "Z"']);
         quote_nullable
--------------------------------
 E'{foo,bar,"b ''A'' \\"Z\\""}'

你的例子:

CREATE OR REPLACE FUNCTION test_function()
  RETURNS text AS
$func$
DECLARE
   testarray text[] := '{"value 1","value 2","value 3"}';
BEGIN
   RETURN 'any text';
END
$func$ LANGUAGE plpgsql;

其他要点

  • 请不要引用语言名称:LANGUAGE plpgsql
  • 在Postgres中使用小写标识符。 Per documentation:

      

    所有关键词都不区分大小写。标识符是隐含的   转换为小写,除非双引号,就像它们一样   普通的SQL命令。