sql - Oracle 表中的 Xml 批量插入

标签 sql database oracle11g oracle10g procedures

我是甲骨文新手, 我正在尝试的是, 我有一个 xml,我尝试将其插入 oracle 数据库表中,当我尝试插入它时,我已经形成了一个查询。我得到一些错误,比如

Error report - ORA-06550: line 35, column 84: PL/SQL: ORA-00933: SQL command not properly ended ORA-06550: line 5, column 2: PL/SQL: SQL Statement ignored 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action:

我无法弄清楚我错过了什么,建议我如何更改查询,

这是我正在尝试工作的 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 (
		 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;

我希望你能理解我的问题,谢谢。

最佳答案

您需要使用 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')));

关于sql - Oracle 表中的 Xml 批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30952656/

相关文章:

php - 在WHERE子句中使用PHP变量更新数据库

php - 如何在 php 或 mysql 中查找递归日期?

sql - 是否可以从 SQL 查询中获取匹配的字符串?

javascript - 如何使用 Ajax 删除 Oracle APEX 经典报表中选定的复选框行

SQL 存储过程问题 - 十进制值转换问题

sql - 有用的常用 SQL 数据模型?

mysql - 我应该在 Ruby on Rails 3.0 中索引日期列吗

sql - Oracle 正则表达式替换多次出现的用逗号包围的字符串

oracle11g - 获取Oracle中的物化 View 日志的列表'

sql - 在 SQL Server 中,将时间和日期拆分为两个单独的日期列是最佳做法吗?