次の関数を実行するとエラーが発生します
この行を削除すると機能することに気付きましたAND t.image_id = mviews.image_id
。
mviews.image_id を定数に変更しても機能します
ループパラメータを正しく参照していないと思いますか?
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
CREATE OR REPLACE FUNCTION test() RETURNS void AS $$
DECLARE
mviews RECORD;
BEGIN
FOR mviews IN
SELECT image_id FROM image_index_1205 WHERE image_type = '01' LIMIT 3
LOOP
copy (
SELECT encode(decode(image, 'base64'), 'hex')
FROM image_index_1205 t
WHERE image_type = '01'
AND t.image_id = mviews.image_id
LIMIT 1
)
TO
'/tmp/test.hex';
END LOOP;
END;
$$ LANGUAGE plpgsql;
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
********** Error **********
ERROR: there is no parameter $1
SQL state: 42P02
Context: SQL statement "copy ( SELECT encode(decode(image, 'base64'), 'hex') FROM image_index_1205 t WHERE image_type = '01' AND t.image_id = $1 LIMIT 1 ) TO '/tmp/test.hex'"
PL/pgSQL function "test" line 7 at SQL statement
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000