鉴于此类型:
-- Just for testing purposes:
CREATE TYPE testType as (name text)
Run Code Online (Sandbox Code Playgroud)
我可以使用此函数动态获取字段的值:
CREATE OR REPLACE FUNCTION get_field(object anyelement, field text) RETURNS text as
$BODY$
DECLARE
value text;
BEGIN
EXECUTE 'SELECT $1."' || field || '"'
USING object
INTO value;
return value;
END;
$BODY$
LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)
呼叫get_field('(david)'::testType, 'name')
按预期工作返回"大卫".
但是如何在复合类型中设置字段的值?我试过这些功能:
CREATE OR REPLACE FUNCTION set_field_try1(object anyelement, field text, value text)
RETURNS anyelement
as
$BODY$
DECLARE
value text;
BEGIN
EXECUTE '$1."' || field || '" := $2'
USING object, value; …
Run Code Online (Sandbox Code Playgroud)