[英]How to use variable name in JSONB insert in postgres
我正在嘗試編寫一個簡單的plsql腳本以在表中插入數據,該表具有jsonb作為列之一
例:
do $do$ declare
tel varchar:= '8000012000';
begin for i in 1..10 loop insert
into
t_tbl_sample(
lob,
prop_name,
prop_value,
prop_details
)
values(
'TN_ADD' || i,'ABC','XYZ',
'[{"specCode": {"name": "Telephone Number", "text": "TEL_NUM"}, "specValue": {"code": null, "text": tel}}]'
);
end loop;
end $do$;
但是執行此操作會出現錯誤:
ERROR: invalid input syntax for type json
LINE 11: '[{"specCode": {"name": "Telephone Number", "text": "TEL_NUM...
^
DETAIL: Token "tel" is invalid.
我如何編寫pgSql以在JSONB元素內使用變量? 聽起來像是一個簡單的要求,但是我在任何地方都找不到語法或參考
可能最簡單的方法是只使用字符串連接:
( '[{"specCode": {"name": "Telephone Number", "text": "TEL_NUM"}, "specValue": {"code": null, "text":' || tel || '}}]')::json
如果tel始終是整數,那將起作用。 否則,您將需要雙引號:
( '[{"specCode": {"name": "Telephone Number", "text": "TEL_NUM"}, "specValue": {"code": null, "text":"' || tel || '"}}]')::json
有點無關,但這確實不需要pl / pgsql,並且絕對不需要循環。 您可以使用generate_series來獲取tel的每個元素:
WITH data AS (
SELECT i, substr('8000012000', i, 1) as tel
FROM generate_series(1, length('8000012000')) as g(i)
)
INSERT INTO
t_tbl_sample(
lob,
prop_name,
prop_value,
prop_details
)
SELECT 'TN_ADD' || i,
'ABC',
'XYZ',
('[{"specCode": {"name": "Telephone Number", "text": "TEL_NUM"}, "specValue": {"code": null, "text":"' || tel || '"}}]')::json
FROM data
returning *;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.