假设我有一个关联数组(用另一种语言定义),如下所示:
mEncoder = MediaCodec.createEncoderByType("video/avc");//MediaCodec.createByCodecName(info.getName());
MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 1920, 1080);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, BIT_RATE);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, FPS);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mEncoder.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mEncoder.start();
我有一张这样的桌子:
apply = {
'qwer': ['tju', 'snf', 'rjtj', 'sadgg']
'asdf': ['rtj', 'sfm', 'rtjt', 'adjdj']
...
'zxcv': ['qwr', 'trj', '3w4u', '3tt3']
}
如果CREATE TABLE apples (
id integer,
name varchar(10),
key varchar(10),
value varchar(10)
);
位于apples.value
变量的一个列表中,我想应用更新,然后将apply
设置为数组的键。如果apples.key
为apples.value
,则将tju
设置为apples.key
。
我目前的方法看起来像这样(将PostgreSQL与任何程序语言混合):
qwer
我想在一个声明中这样做。
答案 0 :(得分:4)
作为给定示例的概念证明,字符串的格式与您显示的完全一致:
演示准备好的陈述,就像您的客户可能使用的那样。
PREPARE my_update AS
UPDATE apples a
SET key = upd.key
FROM (
SELECT trim (split_part(key_val, ': ', 1), ' ''') AS key
, string_to_array(translate(split_part(key_val, ': ', 2), '[]''', ''), ', ') AS val_arr
FROM unnest(string_to_array(trim($1, E'{}\n'), E'\n')) key_val
) upd
WHERE a.value = ANY(upd.val_arr);
EXECUTE
在同一个会话中任意次:
EXECUTE my_update($assoc_arr${
'qwer': ['tju', 'snf', 'rjtj', 'sadgg']
'asdf': ['rtj', 'sfm', 'rtjt', 'adjdj']
'zxcv': ['qwr', 'trj', '3w4u', '3tt3']
}$assoc_arr$);
相关:
但我宁愿用原始语言处理该类型,并分别传递key
和val_arr
。