簡體   English   中英

如何在PostgreSQL的JSONB插入中使用變量名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM