2016-04-14 121 views
1
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 ; 
$$; 

ERROR:在或接近 「文本」 語法錯誤
LINE 2:DECLARE F1文本,F2文本;當在聲明發生了語法錯誤聲明的PostgreSQL

我該如何更改?

+0

聲明需要與'分開;'請參閱手冊:http://www.postgresql.org/docs/current/static/plpgsql-declarations.html加:SQL不支持只有變量PL/pgSQL –

回答

0

您已經編寫了PL/PgSQL代碼,但標記爲LANGUAGE SQL。如果您正在編寫pl/pgsql函數,請使用LANGUAGE plpgsql

+0

語言sql - >語言plpgsql使用!!!語法錯誤在或接近「,」第2行:聲明f1文本,f2文本 –

+1

@JongpyoJeon是的,因爲你的代碼不是有效的plpgsql,所以聲明以分號分隔';'而不是逗號','。但這就是爲什麼你得到*第一個*錯誤。您應該嘗試閱讀手冊和示例。 –

2

我看到兩個問題:

  1. 錯誤的語言規範 - PostgreSQL的原生程序語言是PLPGSQL
  2. DECLARE statement使用分號分隔各個變量聲明。

    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)