我需要在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'];
答案 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命令。