1
我使用PostgreSQL 9.1.3
及以下功能:通過INOUT參數返回數組無需修改
CREATE OR REPLACE FUNCTION cad(INOUT args text[], OUT retval int4) AS $cad$
BEGIN
retval := 0;
RAISE NOTICE 'cad: %', args;
END;
$cad$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION dodo(in_args text[]) RETURNS text[] AS $dodo$
DECLARE
_res text[];
_rv int4;
BEGIN
_res := in_args;
EXECUTE 'SELECT cad($1)' USING _res INTO _res, _rv;
RETURN _res;
END;
$dodo$ LANGUAGE plpgsql;
當我直接打電話cad
,我得到預期的輸出:
psql$ select cad(ARRAY['Quiz']);
NOTICE: cad: {Quiz}
-[ RECORD 1 ]---
cad | ({Quiz},0)
Time: 0,319 ms
我的預期調用dodo(ARRAY['Quiz'])
的結果是沒有更改的輸入數組。但相反,我收到以下錯誤:
psql$ select dodo(ARRAY['Quiz']);
NOTICE: cad: {Quiz}CONTEXT: SQL statement "SELECT cad($1)"
PL/pgSQL function "dodo" line 8 at EXECUTE statement
ERROR: array value must start with "{" or dimension information
CONTEXT: PL/pgSQL function "dodo" line 8 at EXECUTE statement
這裏有什麼問題?
P.S .:我必須使用EXECUTE
作爲函數來調用會有所不同,代碼簡化爲目的的問題。
確實,這樣一個錯過的簡單的事情... – vyegorov
這是一旦你知道:-) –