【发布时间】:2017-03-10 19:17:46
【问题描述】:
我需要创建一个新表来存储传入的 XML 消息,并计划在 create table 语句本身中添加一些虚拟列。这很好用!我一直在搜索,但找不到更改此表以添加新虚拟列的方法。在google上搜索让我this page
但那是从 2007 年开始的,我想知道 Oracle 12c 现在是否提供此功能。有人试过这个并有什么建议吗?谢谢!
例如:
CREATE TABLE Import_Log (message_guid varchar2(36),
xml_data XMLType)
XMLTYPE xml_data STORE AS BINARY XML
VIRTUAL COLUMNS
(policynumber AS (XMLCast(XMLQuery('/PolicyMessage/Policy/PolicyNumber'
PASSING xml_data RETURNING CONTENT)
AS VARCHAR2(14))),
effective_date AS (XMLCast(XMLQuery('/PolicyMessage/Policy/PolicyEffectiveDate'
PASSING xml_data RETURNING CONTENT)
AS DATE )),
expiration_date AS (XMLCast(XMLQuery('/PolicyMessage/Policy/PolicyExpirationDate'
PASSING xml_data RETURNING CONTENT)
AS DATE ))
);
-- 以上工作正常。
现在,如果我想添加一个新的虚拟列,唯一的方法似乎是删除并重新创建表,这可能并不容易。
【问题讨论】:
-
关于添加“常规”类型或XML类型的虚拟列的问题?
-
它将与创建表时预定义的现有虚拟列相同,如 PolicyNumber、Effective_Date 等。
-
作为一种解决方法,我最终创建了一个定义了“新”列的视图,因为我可以随时重新创建视图而不会丢失任何数据。仍然想知道这是否可以使用 alter table 来实现。