Eds*_*ior 3 arrays postgresql function 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';
Run Code Online (Sandbox Code Playgroud)
我执行代码时遇到此错误:
Run Code Online (Sandbox Code Playgroud)ERROR: syntax error at or near "'value 1'" LINE 5: TESTARRAY TEXT['value 1', 'value 2', 'value 3'];
poz*_*ozs 11
默认值的正确语法(在变量声明中)是.{ DEFAULT | := } expression
对于expression,您可以使用任何数组输入.
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
Run Code Online (Sandbox Code Playgroud)
@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"}
Run Code Online (Sandbox Code Playgroud)
每种类型的每个可能值都有一个字符串表示。
要获得易于引用的版本,该版本处理所有可能的极端情况,请将其包装在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\\""}'
Run Code Online (Sandbox Code Playgroud)
你的例子:
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;
Run Code Online (Sandbox Code Playgroud)
LANGUAGE plpgsql.在 Postgres 中使用小写标识符。根据文档:
所有关键字都不区分大小写。除非双引号,否则标识符会隐式转换为小写,就像在普通 SQL 命令中一样。
| 归档时间: |
|
| 查看次数: |
10411 次 |
| 最近记录: |