我需要创建一个新表来存储传入的XML消息,并计划在create table语句中添加一些虚拟列。这很棒!我一直在搜索,无法找到一种方法来更改此表以添加新的虚拟列。在Google上搜索,让我转到this page
但那是从2007年开始,我想知道这个功能现在是否可以在Oracle 12c中使用。有人试过这个并有任何建议吗?谢谢!
例如:
{{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.