当在声明declare postgresql中发生语法错误时

3
CREATE OR REPLACE FUNCTION fn_SplitArrayStr( anyelement , anyelement )
RETURNS anyarray 
LANGUAGE SQL 
AS $$
DECLARE f1 text , f2  text ; 
BEGIN
    f1 := $1::text ; 
    f2 := $2::text ; 
    SELECT * FROM UNNEST( string_to_array(f1, f2) ) as c1 ; 
END ;
$$; 

错误:在“text”附近有语法错误
第二行:DECLARE f1 text,f2 text;

我该如何更改?


声明需要用 ; 分隔,参见手册:http://www.postgresql.org/docs/current/static/plpgsql-declarations.html 另外:SQL 不支持变量,只有 PL/pgSQL。 - user330315
3个回答

4

我看到两个问题:

  1. wrong language specification - PostgreSQL native procedural language is plpgsql.
  2. DECLARE statement uses semicolon for separation between individual variable declarations.

    postgres=# create or replace function foo()
    returns int as $$
    declare a int; b int;
    begin 
      a := 10; b := 20;
      return a + b;
    end;
    $$ language plpgsql;
    CREATE FUNCTION
    
    postgres=# select foo();
    ┌─────┐
    │ foo │
    ╞═════╡
    │  30 │
    └─────┘
    (1 row)
    

1

你可以尝试在过程结尾处指定语言

$$ LANGUAGE plpgsql;


0
你已经编写了 PL/PgSQL 代码,但标记为 LANGUAGE SQL。如果你正在编写 pl/pgsql 函数,请使用 LANGUAGE plpgsql

语言 sql -> 语言 plpgsql 使用 !!! 语法错误在或附近 "," 第2行: 声明 f1 文本,f2 文本。 - Jongpyo Jeon
1
@JongpyoJeon 是的,因为你的代码不是有效的plpgsql,声明应该用分号;而不是逗号,分隔。但这就是你得到第一个错误的原因。你应该尝试阅读手册和示例。 - Craig Ringer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接