Oracle合并到声明中

时间:2013-07-31 14:21:20

标签: oracle insert merge

尝试将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')

1 个答案:

答案 0 :(得分: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)