2015-06-20 174 views
1

即時通訊新的oracle, 即時嘗試是什麼, 我有一個XML,我嘗試插入相同的數據庫表,我已經形成了一個查詢,當我嘗試插入它。我得到了一些錯誤,如xml批量插入oracle表

錯誤報告 - ORA-06550:行35,列84: PL/SQL:ORA-00933:SQL命令不能正確地結束 ORA-06550:第5行,第2列: PL/SQL:忽略SQL語句 06550. 00000 - 「行%s,列%s:\ n%s」 *原因:通常是PL/SQL編譯錯誤。 *操作:

我不能能找出我錯過了,建議我如何更改查詢,

我的繼承人XML和查詢其即時通訊努力工作。

- <call> 
 
- <callSummary> 
 
    <indId>100</indId> 
 
    <notificationNo>notification</notificationNo> 
 
    <orderNo>orderno</orderNo> 
 
    </callSummary> 
 
- <callList> 
 
- <callDetails> 
 
    <maintenancetype>1</maintenancetype> 
 
    <serialNo>1</serialNo> 
 
    <unitType>unit type</unitType> 
 
    </callDetails> 
 
- <callDetails> 
 
    <maintenancetype>1</maintenancetype> 
 
    <serialNo>2</serialNo> 
 
    <unitType>unit type</unitType> 
 
    </callDetails> 
 
- <callDetails> 
 
    <maintenancetype>2</maintenancetype> 
 
    <serialNo>1</serialNo> 
 
    <unitType>unit type</unitType> 
 
    </callDetails> 
 
- <callDetails> 
 
    <maintenancetype>2</maintenancetype> 
 
    <serialNo>2</serialNo> 
 
    <unitType>unit type</unitType> 
 
    </callDetails> 
 
    </callList> 
 
    </call>

我的查詢是

DECLARE 
 
call_xml XMLTYPE := xmltype('<call><callSummary><indId>100</indId><notificationNo>notification</notificationNo><orderNo>orderno</orderNo><</callSummary><callList><callDetails><maintenancetype>1</maintenancetype><serialNo>1</serialNo><unitType>unit type</unitType></callDetails><callDetails><maintenancetype>1</maintenancetype><serialNo>2</serialNo><unitType>unit type</unitType></callDetails><callDetails><maintenancetype>2</maintenancetype><serialNo>1</serialNo><unitType>unit type</unitType></callDetails><callDetails><maintenancetype>2</maintenancetype><serialNo>2</serialNo><unitType>unit type</unitType></callDetails></callList></call>'); 
 
    
 
BEGIN 
 
INSERT INTO ORDER_DETAILS (
 
\t \t IND_ID,NOTIFICATION_NO,ORDER_NO,MAINT_TYPE,SERIAL_NO,UNIT_TYPE) 
 
    SELECT 
 
    call_xml.value('call/callSummary/indId[1]','CLNT(3)'), 
 
    call_xml.value('call/callSummary/notificationNo[1]','CHAR(12)'), 
 
    call_xml.value('call/callSummary/orderNo[1]','CHAR(12)'), 
 
    call_xml.value('call/callSummary/callList/callDetails/maintenancetype[1]','CHAR(1)'), 
 
    call_xml.value('call/callSummary/callList/callDetails/serialNo[1]','CHAR(1)'), 
 
    call_xml.value('call/callSummary/callList/callDetails/unitType[1]','CHAR(20)') from call_xml.nodes('call'); 
 
    
 
    END;

我希望你明白我的問題,感謝名單提前。

+1

插入語句應該包含'INTO'。嘗試調整,看看是否解決錯誤。 – Parfait

+0

@Parfait是的,我包括並試圖..再次顯示相同的錯誤 – ConquistadorAravinth

回答

2

你會想要使用xmlsequence函數。它將允許您從XML對象中選擇一個節點列表。如果你想使用pl/sql,用你的變量替換xmltype。

 SELECT 
    extractValue(column_value,'callSummary/indId[1]'), 
    extractValue(column_value,'callSummary/notificationNo[1]'), 
    extractValue(column_value,'callSummary/orderNo[1]'), 
    extractValue(column_value,'callSummary/callList/callDetails/maintenancetype[1]'), 
    extractValue(column_value,'callSummary/callList/callDetails/serialNo[1]'), 
    extractValue(column_value,'callSummary/callList/callDetails/unitType[1]') from table (
     xmlsequence(
     extract(
      xmltype('<call><callSummary><indId>100</indId><notificationNo>notification</notificationNo><orderNo>orderno</orderNo></callSummary><callList><callDetails><maintenancetype>1</maintenancetype><serialNo>1</serialNo><unitType>unit type</unitType></callDetails><callDetails><maintenancetype>1</maintenancetype><serialNo>2</serialNo><unitType>unit type</unitType></callDetails><callDetails><maintenancetype>2</maintenancetype><serialNo>1</serialNo><unitType>unit type</unitType></callDetails><callDetails><maintenancetype>2</maintenancetype><serialNo>2</serialNo><unitType>unit type</unitType></callDetails></callList></call>'),'/call/callSummary'))); 
+0

嘿尼克...它的工作人...感謝很多..你救了我的一天... :-) – ConquistadorAravinth

+0

沒問題。樂意效勞。 – Nick