0
DECLARE
resources varchar[];
default_active development.switch_state;
defaultsp varchar[];
x varchar[];
columnname varchar;
looper integer;
BEGIN
-- setting resources
resources := array(SELECT column_name::text AS resource FROM information_schema.columns WHERE table_name='usr_defprivilegies');
resources := array_remove(resources, 'id_defprvg');
resources := array_remove(resources, 'id_category');
resources := array_remove(resources, 'id_level');
-- setting privilegies switch
SELECT ap.default_active AS switcher INTO default_active FROM development.usr_activeprivilegies AS ap
INNER JOIN development.usr_managelayer AS um ON ap.id_activeprvg = um.id_activeprvg WHERE um.id_user = $1;
IF default_active = '1' THEN
looper := 1;
FOREACH x SLICE 1 IN ARRAY resources
LOOP
columnname := resources[looper];
defaultsp := array(SELECT columnname FROM development.usr_defprivilegies AS dp WHERE dp.id_category = $4 AND dp.id_level = $3);
EXECUTE 'UPDATE development.usr_activeprivilegies SET default_active = ''0'', '
|| resources[looper]
|| ' = '
|| quote_literal(defaultsp[looper])
|| ' WHERE id_activeprvg = '
|| $2;
looper := looper + 1;
END LOOP;
END IF;
RETURN 1;
END;
配列に格納された列の値にアクセスする必要がありますが、その方法を見つけることができません。コードは正常に動作しますが、次の行が表示されます。postgres配列に格納されたQUERY行の値を取得する
quote_literal(defaultsp[looper])
「column_name」が返されますが、「column_value」が必要です。
お返事ありがとうございます。