【问题标题】:PLSQL CLOBS into variablesPLSQL CLOBS 成变量
【发布时间】:2012-09-09 22:06:30
【问题描述】:

我正在尝试将CLOB 保存到变量中以执行提取等操作。我有这个代码:

DECLARE
  clob_rec CLOB;
  n_rec NUMBER:=100;
BEGIN
  SELECT LOB INTO clob_rec FROM table1 WHERE ID = 1234;
  n_rec := clob_rec.EXTRACT('//XPTO/text()', 'xmlns:XPTO').getNumVal();
END;

我想将XML 中的多个值保存到n_rec 等各种变量中。如何获得“对象实例(CLOB)”来执行extract()之类的功能或方法?

【问题讨论】:

  • 可以使用dbms_lob包来操作CLOB变量;但是extract 是一个XML 概念,那么您是否有XMLType 列,或者您是否需要XMLCast 之类的内容?不确定我是否理解这个问题足以将其发布为答案...

标签: oracle plsql oracle10g oracle11g plsqldeveloper


【解决方案1】:

您需要先将其转换为 XMLtype:

DECLARE
  clob_rec CLOB;
  n_rec NUMBER:=100;
  x XMLType;
BEGIN
  SELECT LOB INTO clob_rec FROM table1 WHERE ID = 1234;
  x := XMLType(clob_rec);
  n_rec := x.EXTRACT('//XPTO/text()', 'xmlns:XPTO').getNumVal();
END;

【讨论】:

  • 就是杰弗里·坎普。我会将其标记为解决方案,但我还有另一个问题,我非常感谢您或其他任何人的帮助。从 xml 中提取节点值时,有什么方法可以忽略命名空间?所有 XML 都针对相同的 SCHEMA 进行验证,但它们具有不同的命名空间,一些是“er:xxx”,一些是“ns:yyy”。我想忽略命名空间,这样我就有办法将相同的过程应用于我所有的 CLOBS。非常感谢。
  • 我认为最好为不同的模式有单独的过程;虽然我认为您可以使用 * xpath 表达式跳过命名空间,例如x.Extract('/*/node/text()') - 但我不是 XPath 的世界专家,所以你自己试试吧 :)
猜你喜欢
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
相关资源
最近更新 更多