南大通用GBase8s 常用SQL语句(160)

将值插入到串行列之内

您可插入连续的数字、显式值或重置在 SERIAL、BIGSERIAL 或 SERIAL8 列中值的显式值:

  1. 要插入连续的串行值

为 INSERT 语句中的串行列指定零(0)。在此情况下,数据库服务器指定下一最高值。

  1. 要插入显式值

首先验证在表中没有重复的非零值,之后指定非零值。如果该串行列单独地索引,或有唯一约束,且表中已有重复的值,则导致错误。如果该值大于当前的最大值,您会在序列中创建间隔。

  1. 要创建序列中的间隔(即,重置串行值)

在列中指定大于当前最大值的正值。

另外,您可使用 ALTER TABLE 语句的 MODIFY 子句来重置串行列的下一值。

要了解更多信息,请参阅 更改下一个顺序值。

在串行列中 NULL 值无效。

在 GBase 8s 中,将序列值插入到作为表层级中一部分的表内,以您插入的值更新包含该串行计数器的层级中的所有表。您可将此值表示为零(0)作为下一最高值,或表示为特定的正整数。

将值插入到 Opaque 类型列内

GBase 8s 支持在 VALUES 子句中指定 opaque 数据类型的文字值作为引用的字符串的 INSERT 操作。您可使用此语法来将 opaque 的 UDT 插入到本地数据库的表的列内,或到本地实例的其他数据库中的表的列内。

当插入某些 opaque 数据类型时,需要特殊处理。例如,如果 opaque 数据类型包含占据空间的数据或多重表示的数据,则它可能提供如何存储该数据的选择:在内部结构中,或对于大对象,在智能大对象中。

这是通过调用名为 assign( ) 的用户定义的支持函数来完成的。当您在其行包含这些 opaque 类型之一的表上执行 INSERT 时,数据库服务器自动地为该类型调用 assign( ) 函数。assign( ) 函数可决定如何存储该数据。要了解更多关于 assign( ) 支持函数的信息,请参阅 GBase 8s 用户定义的例程和数据类型开发者指南 。

将值插入到集合列内

您可使用 VALUES 子句来将值插入到集合列内。要获取更多信息,请参阅 集合构造函数。

例如,假设您定义 tab1 表如下:

CREATE TABLE tab1

   (

   int1 INTEGER,

   list1 LIST(ROW(a INTEGER, b CHAR(5)) NOT NULL),

   dec1 DECIMAL(5,2)

   );

下列 INSERT 语句将行插入到 tab1内:

INSERT INTO tab1 VALUES

   (

   10,

   LIST{ROW(1,'abcde'),

      ROW(POW(3,3), '=27'),

      ROW(ROUND(ROOT(126)), '=11')},

   100

   );

在本示例中,集合列 list1 有三个元素。每一元素为带有一 INTEGER 字段和一 CHAR(5) 字段的未命名的行类型。第一个元素由两个精确值组成,一个整数(1)和一个引用的字符串(abcde)。第二个和第三个元素还使用引用的字符串来指出第二个字段,但以表达式指定第一个字段的值。

不管您使用什么方式来将值插入到集合列内,都不可将 NULL 元素插入到该列内。因而您使用的表达式不可等于 NULL。如果您尝试插入其中的集合包含 NULL 元素,则数据库服务器返回错误。

您还可使用集合变量来将一个或多个集合元素的值插入到集合列内。要获取更多信息,请参阅 集合派生表。

使用 VALUES 子句来将值插入到命名的或未命名的 ROW 类型列内,如下例所示:

CREATE ROW TYPE address_t

   (

   street CHAR(20),

   city CHAR(15),

   state CHAR(2),

   zipcode CHAR(9)

   );

CREATE TABLE employee

   (

   name ROW ( fname CHAR(20), lname CHAR(20)),

   address address_t

   );

下一示例在 name 和 address 列中插入精确值:

INSERT INTO employee VALUES

   (

      ROW('John', 'Williams'),

      ROW('103 Baker St', 'Tracy','CA', 94060)::address_t

   );

INSERT 使用 ROW 构造函数来生成 name 列(未命名的 ROW 数据类型)和 address 列(命名的 ROW 数据类型)的值。当您为命名的 ROW 数据类型指定值时,必须使用 CAST AS 关键字或双冒号(:: )运算符,以 ROW 数据类型的名称来将该值强制转型为命名的 ROW 数据类型。

要了解 ROW 构造函数的语法,请参阅“表达式”部分中的 构造函数表达式。要了解关于命名的 ROW 和未命名的 ROW 数据类型的精确值的信息,请参阅 Literal Row。

当您在 VALUES 子句中使用 ROW 变量时,该 ROW 变量必须包含每一字段值的值。要获取更多信息,请参阅 插入到行变量(ESQL/C、SPL)内。

您可使用 GBase 8s ESQL/C 主变量来以两种方式插入 nonliteral 值:

  • 将整个 ROW 类型插入到列内。使用 VALUES 子句中的 row 变量来一次为 ROW 列中的所有字段插入值。
  • ROW 类型的单个字段。要在 ROW 类型列中插入非精确值,请将这些元素插入到 row 变量内,然后在 UPDATE 语句的 SET 子句中指定该 collection 变量。

将值插入到 ROW 类型列内

使用 VALUES 子句来将值插入到命名的或未命名的 ROW 类型列内,如下例所示:

CREATE ROW TYPE address_t

   (

   street CHAR(20),

   city CHAR(15),

   state CHAR(2),

   zipcode CHAR(9)

   );

CREATE TABLE employee

   (

   name ROW ( fname CHAR(20), lname CHAR(20)),

   address address_t

   );

下一示例在 name 和 address 列中插入精确值:

INSERT INTO employee VALUES

   (

      ROW('John', 'Williams'),

      ROW('103 Baker St', 'Tracy','CA', 94060)::address_t

   );

INSERT 使用 ROW 构造函数来生成 name 列(未命名的 ROW 数据类型)和 address 列(命名的 ROW 数据类型)的值。当您为命名的 ROW 数据类型指定值时,必须使用 CAST AS 关键字或双冒号(:: )运算符,以 ROW 数据类型的名称来将该值强制转型为命名的 ROW 数据类型。

要了解 ROW 构造函数的语法,请参阅“表达式”部分中的 构造函数表达式。要了解关于命名的 ROW 和未命名的 ROW 数据类型的精确值的信息,请参阅 Literal Row。

当您在 VALUES 子句中使用 ROW 变量时,该 ROW 变量必须包含每一字段值的值。要获取更多信息,请参阅 插入到行变量(ESQL/C、SPL)内。

您可使用 GBase 8s ESQL/C 主变量来以两种方式插入 nonliteral 值:

  1. 将整个 ROW 类型插入到列内。使用 VALUES 子句中的 row 变量来一次为 ROW 列中的所有字段插入值。
  2. ROW 类型的单个字段。要在 ROW 类型列中插入非精确值,请将这些元素插入到 row 变量内,然后在 UPDATE 语句的 SET 子句中指定该 collection 变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值