==============================
2017-08-23日更新
--------------------------
首先,在这里严重感谢一下群友 南瓜!
基本这个程序全是他写的。
这里只是记下结果,以便以后回顾
===================================
create or replace function f_update_all( tablename text, update_feilds text, condition_feilds text, out return_value text ) as $$ declare ex_sql text; recs record; _key text ; _value text; begin ex_sql:='update '||quote_ident(tablename)||' set '; --setting values for updated table for recs in select * from json_array_elements(update_feilds::json) loop _key := recs.value ->> 'feild_name'; _value := recs.value ->> 'feild_value' ; if json_typeof(recs.value -> 'feild_value') ='number' then ex_sql:=ex_sql|| _key || '=' || _value ||','; else ex_sql:=ex_sql|| _key || '='''|| (recs.value ->> 'feild_value') || ''','; end if; end loop; ex_sql:= substring(ex_sql from 0 for length(ex_sql)); --setting condition in where ex_sql:=ex_sql||' where 1=1'; for recs in select * from json_array_elements(condition_feilds::json) loop _key := recs.value ->> 'feild_name'; _value := recs.value ->> 'feild_value' ; if json_typeof(recs.value -> 'feild_value') ='number' then ex_sql:=ex_sql|| ' and ' || _key || '=' || _value ||','; else ex_sql:=ex_sql|| ' and ' || _key || '='''|| (recs.value ->> 'feild_value') || ''','; end if; end loop; ex_sql:= substring(ex_sql from 0 for length(ex_sql)); return_value:=ex_sql; end; $$ language plpgsql;当然,这里还是有个问题,对于text number 类型是没有问题的,
但如果是 date 也会更新,
其它别的 data type 可能会出错,这里还需要对各种数据类型进行判断
转载于:https://www.cnblogs.com/ssqhan/p/7399789.html