Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql:与存储函数中的JSON参数合并时出现语法问题_Sql_Postgresql - Fatal编程技术网

Postgresql:与存储函数中的JSON参数合并时出现语法问题

Postgresql:与存储函数中的JSON参数合并时出现语法问题,sql,postgresql,Sql,Postgresql,当我有json输入时面临语法问题,需要将json中的值插入/更新到表中,表是一个视图 预期的 当主id与项目id(PK)匹配时,更新其相应的值 当主id与项目id(PK)不匹配时-插入视图 样本SP drop function if exists sp_post_itemsx; CREATE FUNCTION sp_post_itemsx(i_data jsonb) RETURNS VOID AS $function$ BEGIN MERGE INTO vw_item_status_de

当我有json输入时面临语法问题,需要将json中的值插入/更新到表中,表是一个视图

预期的

  • 当主id与项目id(PK)匹配时,更新其相应的值

  • 当主id与项目id(PK)不匹配时-插入视图

  • 样本SP

    drop function if exists sp_post_itemsx;
    CREATE FUNCTION sp_post_itemsx(i_data jsonb)
    RETURNS VOID
    AS $function$
    BEGIN
      MERGE INTO vw_item_status_detail 
        USING  
        (SELECT 
          i_data->>'fulfillerId' fulfillerId, 
          t->>'itemId' itemId, 
          i_data->>'orderId' orderId, 
          1000,
          t->>'skuCode' skuCode,
          t->>'decorationTechnology' decorationTechnology,
          (t->>'quantity')::numeric quantity ,
          NOW()
        FROM jsonb_array_elements(i_data  -> 'items')) as t ON item_id = t.itemId
    
     WHEN MATCHED THEN UPDATE SET 
            vw.quantity = t.quantity
    
     WHEN NOT MATCHED THEN
       INSERT INTO vw_item_status_detail(
          fulfiller_id,
          item_id,
          order_id,
          status_id,
          sku_code,
          decoration_technology,
          quantity,
          item_updated_time)
       SELECT 
          i_data->>'fulfillerId' fulfillerId, 
          t->>'itemId' itemId, 
          i_data->>'orderId' orderId, 
          1000,
          t->>'skuCode' skuCode,
          t->>'decorationTechnology' decorationTechnology,
          (t->>'quantity')::numeric quantity ,
          NOW()
       FROM jsonb_array_elements(i_data  -> 'items') t ;
      
    END;
    $function$
    LANGUAGE plpgsql;
    
    
    错误:“vw\ U项目\状态\详细信息”不是已知变量


    不确定语法有什么问题,或者合并不适用于insert for views表

    Postgres中没有
    MERGE
    语句找到此url和许多其他url供参考@一匹没有名字的马如果合并不是一个选项,有没有其他最佳且简单的方法来完成类似的任务@一个没有名字的马好吧,当前应该是你当前支持的语句的参考,而不是邮件列表上的讨论,如果或者如何实现这样的事情。另一种选择是
    插入。。。在冲突()时,请执行更新