TSCreateVirtualTab 过程

TSCreateVirtualTab 过程基于包含 TimeSeries 列的表创建虚拟表。

语法

TSCreateVirtualTab(VirtualTableName  lvarchar,
                   BaseTableName     lvarchar,
                   NewTimeSeries     lvarchar,
                   TSVTMode          integer default 0,
                   TSColName         lvarchar default NULL);
VirtualTableName
新虚拟表的名称。
BaseTableName
基本表的名称。
NewTimeSeries(可选)
要创建的新时间系列的定义。
TSVTMode(可选)
设置虚拟表方式,如 TSVTMode 参数中所述。
TSColName(可选)
对于包含多个 TimeSeries 列的基本表,指定要用于创建虚拟表的 TimeSeries 列的名称。TSColName 参数的缺省值为 NULL,在这种情况下,基本表必须仅包含一个 TimeSeries 列。

用法

使用 TSCreateVirtualTab 过程基于包含时间系列的表创建虚拟表。因为 TimeSeries 行类型中的列名用作生成的虚拟表中的列名,所以必须确保这些列名与基本表中的其他列名不发生冲突。虚拟表中行的总长度(非时间系列与 TimeSeries 列的和)不得超过 32 KB。

可以配置时间系列虚拟表以允许通过虚拟表更新基本表中的数据。如果指定任何可选参数,必须按照在语法中显示的顺序来指定,但您可以使用其中任何一个,而不使用其他参数。例如,可以指定 TSColName 参数而不包括 NewTimeSeriesTSVTMode 参数。

NewTimeSeries 参数

NewTimeSeries 参数指定虚拟表是否允许将元素插入基本表中不存在的时间系列,该时间系列不存在的原因是行不存在或者行还不具有时间系列元素。如果要在时间系列不存在时允许插入,请使用 NewTimeSeries 参数指定时间系列输入字符串。如果要在时间系列不存在时禁止插入,请在创建虚拟表时省略 NewTimeSeries 参数。

下表描述为实现不同目标尝试更新基本表的结果。

表 1. 更新基本表的行为
目标 结果 是否需要使用 NewTimeSeries 参数?
将时间系列元素添加到没有任何时间系列数据的现有行。例如,为特定计量表添加第一个计量表读数。 新的时间系列将插入现有行。
将其他时间系列元素添加到现有时间系列。例如,为具有先前读数的计量表添加新的计量表读数。 如果时间点不同于现有元素,那么新元素将插入时间系列。如果时间点与现有元素相同,那么将使用新值更新现有元素。

如果 TSVTMode 参数包括值 1,那么相同时间点的多个元素可以共存,因此将插入新元素并且保留现有元素。

添加一个新行。例如,为新的计量表标识添加行。 新行将插入基本表。

如果不包括 NewTimeSeries 参数,并尝试将时间系列元素插入不具有任何时间系列元素的现有行或插入新行,那么将接收到错误。

示例

以下示例基于表 daily_stocks 创建名为 daily_stocks_virt 的虚拟表。因为本示例为 NewTimeSeries 参数指定了值,所以当底层基本表中的元素不存在时间系列时,虚拟表 daily_stocks_virt 仍将允许插入。如果执行这样的插入,数据库服务器将创建新的空时间系列,该时间系列使用日历 daycal 且原点为 2011 年 1 月 3 日。
execute procedure TSCreateVirtualTab('daily_stocks_virt', 
         'daily_stocks', 'calendar(daycal), 
         origin(2011-01-03 00:00:00.00000)' );