簡體   English   中英

帶有JSON變量的JSON對象

[英]JSON Object with variables into PostgreSQL

我有以下功能:

create or replace function something(id integer)
  RETURNS INTEGER
language plpgsql
as $$
  DECLARE
  name varchar;
  email varchar;
  route varchar;
  now timestamp;
  BEGIN
    now = current_timestamp;
    SELECT apd.apd_nome, apd.apd_email, CAST(r.rota_params->>'url_completa' as varchar) into name, email, route FROM avise_produto_disponivel apd
      inner join produto p on apd.pro_id = p.pro_id
      inner join produto_div div on p.pro_id = div.pro_id
      inner join produto_oferta_div pod on div.pod_id = pod.pod_id
      inner join produto_oferta po on po.ofe_id = pod.ofe_id
      inner join rotas r on CAST(r.rota_params->>'oferta_id' as integer) = po.ofe_id
    where apd.pro_id = $1;
    DELETE FROM avise_produto_disponivel where pro_id = $1;
    rota = CONCAT('https://www.something.com/', route);
    INSERT INTO comunicacao (cot_id, com_para, com_assunto, com_data_criado, com_parametros, com_para_nome, cos_id, com_de) VALUES (1, email, 'Produto Chegou', now, '{"NOME": name, "URL": route}', name, 1, 'correio');
    return 1;
  END;
$$ ;

但是當我嘗試執行時,出現以下錯誤:

[22P02] ERROR: invalid input syntax for type json Detalhe: Token "nome" is invalid. Where: JSON data, line 1: {"NOME": name... PL/pgSQL function avise_me(integer) line 18 at SQL statement

提前致謝。

您可以通過castin測試JSON語法的使用情況,測試

   SELECT '{"NOME": "JOÃO", "URL": "http://rota.com.br"}'::json;

它是一個轉換為JSON的字符串表示形式...並不是您所需要的。 嘗試在INSERT INTO comunicacao使用以下內容

  json_build_object('nome', name,  'URL', route)

參見https://www.postgresql.org/docs/current/functions-json.html


PS1:似乎在初始“ SELECT INTO”處也存在錯誤。

PS2:我更喜歡在幾乎所有應用程序中使用JSONb而不是JSON。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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