2016-07-11 6 views
2

私は以下のpl/pgsql関数を持っています。 (もちろん、これは完全な関数ではありません、それは問題を再現するために必要なコードだけの最小限の量です)forループ内のPL/pgSQL「形式が正しくない配列リテラル」エラー

CREATE OR REPLACE FUNCTION test_func(infos TEXT[][]) 
RETURNS void AS 
$$ 
DECLARE 
    info TEXT[]; 
    type TEXT[]; 
    name TEXT; 
BEGIN 
    FOREACH info SLICE 1 IN ARRAY infos LOOP 
     RAISE NOTICE 'Stuff: %', info; 
     type := info[1]; 
     name := info[2]; 
     RAISE NOTICE 'Done with stuff'; 
    END LOOP; 
RETURN; 
END; 
$$ LANGUAGE plpgsql; 

私はSELECT test_func('{{something, things},{other, data}}'::TEXT[][]);を使用して機能を実行すると、私は次の出力を得る:

NOTICE: Stuff: {something,things} 
ERROR: malformed array literal: "something" 
DETAIL: Array value must start with "{" or dimension information. 
CONTEXT: PL/pgSQL function test_func(text[]) line 10 at assignment 

このエラーがどのように起こっているのか分かりません。 infoの値が表示されると、{something,things}と表示されます。これは適切な配列リテラルであるようです。

私はPostgreSQLバージョン9.4.7を使用しています。

答えて

3

変数typetexttext[]ない)でなければならない:

CREATE OR REPLACE FUNCTION test_func(infos TEXT[][]) 
RETURNS void AS 
$$ 
DECLARE 
    info TEXT[]; 
    type TEXT; 
    name TEXT; 
... 
関連する問題