2015-06-20 2 views
1

Im new to oracle, что я пытаюсь, У меня есть xml, я пытаюсь вставить то же самое в таблицу базы данных oracle, я сформировал запрос, когда я пытаюсь вставить его , я получаю некоторые ошибки, как докладXml объемная вставка в таблице оракула

Error - ORA-06550: линия 35, столбец 84: PL/SQL: ORA-00933: команда SQL не правильно закончился ORA-06550: строка 5, колонка 2: PL/SQL: заявление SQL игнорируется 06550. 00000 - "строка% s, столбец% s: \ n% s" * Причина: Обычно ошибка компиляции PL/SQL. * Действие:

я не мог в состоянии понять, что я пропустил, предложить мне, как изменить запрос,

Heres мой 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

Смежные вопросы