我有一个PL/SQL过程,当前从XML服务获取数据,并且只执行插入操作。Oracle PL/SQL对来自XML的数据使用Merge命令表
xml_data := xmltype(GET_XML_F('http://test.example.com/mywebservice');
--GET_XML_F gets the XML text from the site
INSERT INTO TEST_READINGS (TEST, READING_DATE, CREATE_DATE, LOCATION_ID)
SELECT round(avg(readings.reading_val), 2),
to_date(substr(readings.reading_dt, 1, 10),'YYYY-MM-DD'), SYSDATE,
p_location_id)
FROM XMLTable(
XMLNamespaces('http://www.example.com' as "ns1"),
'/ns1:test1/ns1:series1/ns1:values1/ns1:value'
PASSING xml_data
COLUMNS reading_val VARCHAR2(50) PATH '.',
reading_dt VARCHAR2(50) PATH '@dateTime') readings
GROUP BY substr(readings.reading_dt,1,10), p_location_id;
我希望能够插入或更新使用事件MERGE语句,它需要在同一天被重新运行发现添加的记录数据。我正在使用下面的代码在其他过程中执行此操作。
MERGE INTO TEST_READINGS USING DUAL
ON (LOCATION_ID = p_location_id AND READING_DATE = p_date)
WHEN NOT MATCHED THEN INSERT
(TEST_reading_id, site_id, test, reading_date, create_date)
VALUES (TEST_readings_seq.nextval, p_location_id,
p_value, p_date, SYSDATE)
WHEN MATCHED THEN UPDATE
SET TEST = p_value;
事实上,我从XMLTable中拉它是抛出我。有没有办法从XMLTable中获取数据,同时仍然使用(非常干净)的合并语法?我会事先删除数据并重新导入或使用大量的条件语句,但我希望尽可能避免这样做。
创建一个从你的SELECT语句 –