使用XMLType列Oracle 12c向表中添加虚拟列

时间:2017-03-10 19:17:47

标签: oracle12c xmltype

我需要创建一个新表来存储传入的XML消息,并计划在create table语句中添加一些虚拟列。这很棒!我一直在搜索,无法找到一种方法来更改此表以添加新的虚拟列。在Google上搜索,让我转到this page

但那是从2007年开始,我想知道这个功能现在是否可以在Oracle 12c中使用。有人试过这个并有任何建议吗?谢谢!

例如:

{{1}}

- 以上工作正常。

现在,如果我想添加一个新的虚拟列,唯一的方法就是删除并重新创建表格,这可能并不容易。“

1 个答案:

答案 0 :(得分:1)

看起来你可以:

SQL> CREATE TABLE Import_Log (message_guid varchar2(36),
  2                   xml_data XMLType)
  3    XMLTYPE xml_data STORE AS BINARY XML
  4    VIRTUAL COLUMNS
  5    (policynumber AS (XMLCast(XMLQuery('/PolicyMessage/Policy/PolicyNumber'
  6                                 PASSING xml_data RETURNING CONTENT)
  7                        AS VARCHAR2(14))),
  8     effective_date AS (XMLCast(XMLQuery('/PolicyMessage/Policy/PolicyEffectiveDate'
  9                                 PASSING xml_data RETURNING CONTENT)
 10                        AS DATE ))
 11  );

Table created.

SQL> 
SQL> alter table import_log
  2  add (
  3        expiration_date generated always AS (XMLCast(XMLQuery('/PolicyMessage/Policy/PolicyExpirationDate'
  4                                 PASSING xml_data RETURNING CONTENT)
  5                        AS DATE )) virtual
  6  )
  7  ;

Table altered.