【问题标题】:Oracle merge into statementoracle合并成语句
【发布时间】:2013-07-31 14:21:20
【问题描述】:

尝试将列表从 python 插入 Oracle 数据库。我想将每个列表中的 4 条数据插入 Oracle,如果 3 条数据条目匹配我想更新。如果它们不匹配,我想插入。

Equip_ID
Parameter_Name
Parameter_Value
Customer

因此,对于这一条目,如果 Equip_ID、Parameter_Name 和 Customer 与数据库中已有的条目匹配,那么我想更新参数值。如果它们不匹配,那么我想将所有数据插入数据库。这是我到目前为止所拥有的,但它似乎没有工作。

MERGE INTO dbName.tableName 
  USING '26522931','Customer','Para001','99999'
  ON (tableName.EQUIPMENT_NODE_ID = '26522931' AND tableName.STREAM_NAME = 'Customer' AND tableName.PARAMETER_NAME = 'Para000')
WHEN MATCHED THEN
  UPDATE SET tableName.PARAMETER_VALUE = '99999'
WHEN NOT MATCHED THEN 
  INSERT (EQUIPMENT_NODE_ID,STREAM_NAME,PARAMETER_NAME,PARAMETER_VALUE) VALUES('26522931','Customer','Para000','99999')

【问题讨论】:

    标签: oracle insert merge


    【解决方案1】:

    我猜你想要这样的东西。如果您没有其他表可用作源,则需要从 DUAL 中选择数据。

    MERGE INTO dbName.tableName 
      USING (select '26522931' equipment_node_id,
                    'Customer' stream_name,
                    'Para001'  parameter_name,
                    '99999'    parameter_value
                from dual) src
      ON (tableName.EQUIPMENT_NODE_ID = src.EQUIPMENT_NODE_ID  
      AND tableName.STREAM_NAME = src.STREAM_NAME  
      AND tableName.PARAMETER_NAME = src.PARAMETER_NAME )
    WHEN MATCHED THEN
      UPDATE SET tableName.PARAMETER_VALUE = src.parameter_value
    WHEN NOT MATCHED THEN 
      INSERT (EQUIPMENT_NODE_ID,
              STREAM_NAME,
              PARAMETER_NAME,
              PARAMETER_VALUE) 
        VALUES(src.EQUIPMENT_NODE_ID,
               src.STREAM_NAME,
               src.PARAMETER_NAME,
               src.PARAMETER_VALUE) 
    

    【讨论】:

      猜你喜欢
      • 2013-05-11
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 2021-03-27
      • 2012-06-06
      相关资源
      最近更新 更多