我有一個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語句 –