2017-03-12 2 views
1

は、以下のブロックを仮定しますv_record.v_column_namePostgresqlの(EXECUTEでレコードの)動的カーソル、フィールドアクセス

do $$ 
declare 
v_table_name text:='table_name'; 
v_column_name text:='column_name'; 
v_record record; 
v_sql_dynamic text; 
v_enum_xml xml; 
v_string text; 
begin 
    v_sql_dynamic:=format('select %s from %s',v_column_name,v_table_name); 
    FOR v_record IN EXECUTE v_sql_dynamic 
    LOOP 
    raise notice 'field with name % has a value of %',v_column_name,***?????***; 
    END LOOP; 
end; 
$$ language plpgsql 

は、どのように私のような方法でv_recordのフィールドへのアクセスを得るのですか?

+1

'to_jsonb(v_record) - >> – Abelisto

+0

イップv_column_name'、それが動作します。ありがとう –

答えて

0

See Abelisto's comment.とにかくtextに値を変換している間に、to_json()は十分速く、少し速いです。

DO 
$$ 
DECLARE 
    v_table_name text := 'table_name'; 
    v_column_name text := 'column_name'; 
    v_sql_dynamic text := format('select %s from %s', v_column_name, v_table_name); 
    v_record  record; 
BEGIN 
    FOR v_record IN EXECUTE v_sql_dynamic 
    LOOP 
     RAISE NOTICE 'field named % has value %.' 
    , v_column_name, to_json(v_record) ->> v_column_name; 
    END LOOP; 
END 
$$ LANGUAGE plpgsql;

関連:

関連する問題