-
- INSERT 语句
使用 INSERT 语句来向表或视图内插入一个或多个新行,或向 SQL 或 GBase 8s ESQL/C 集合变量内插入一个或多个元素。
语法
域选项
元素 | 描述 | 限制 | 语法 |
column | 要接收新值的列 | 请参阅 指定列。 | 标识符 |
external | 要向其内插入数据的外部表 | 必须存在 | 数据库对象名 |
field | 命名的或未命名的 ROW 数据类型的域 | 必须已在数据库中定义 | 字段定义 |
position | 要将 LIST 数据类型的元素插入的位置 | 精确整数或 INT 或 SMALLINT 类型 SPL 变量。 | 精确数值 |
synonym, table, view | 要将数据插入其中的表、视图或同义词 | 它指向的同义词或视图及该表必须存在 | 数据库对象名 |
用法
要将数据插入到表内,您必须或拥有该表或有对该表的 Insert 权限(请参阅 GRANT 语句)。要将数据插入视图内,您必须有所需要的 Insert 权限,且该视图必须满足在 通过视图插入行 中说明的要求。
如果该表或视图有数据完整性约束,则被插入的行必须满足该约束条件。如果不满足,则数据库服务器返回错误。如果将检查模式设置为 IMMEDIATE,则在每一 INSERT 语句的末尾检查所有指定的约束。如果将检查模式设置为 DEFERRED,则不检查所有指定的约束,直到该事务提交为止。
指定列
如果您未显式地指定一个或多个列,则使用列顺序将数据插入到这些列内,该顺序是在创建表或最后改变表时建立的。列顺序罗列在 syscolumns 系统目录表中。
在 GBase 8s ESQL/C 中,您可使用带有 INSERT 语句的 DESCRIBE 语句来标识该列顺序以及表中列的数据类型。
在 INSERT INTO 子句中指定的列的数目必须等于,或隐式地或显式地在 VALUES 子句中或由 SELECT 语句指定的值的数目。如果您指定列表,则列按照您罗列的列的顺序接收数据。跟在 VALUES 关键字之后的第一个值插入到罗列的第一列内,第二个值插入到罗列的第二列内,以此类推。
如果您从列列表省略一列,且该列没有与之相关联的缺省值,则当执行 INSERT 语句时,数据库服务器在该列中放一个 NULL 值。
使用 AT 子句(ESQL/C、SPL)
使用 AT 子句来在集合变量中指定的位置插入 LIST 元素。在缺省情况下, GBase 8s 在 LIST 集合的末尾添加一新的元素。
如果您指定的位置大于列表中元素的数目,则数据库服务器将该元素添加到列表的末尾。您必须指定至少为 1 的位置值,因为列表中的第一个元素在位置 1。
下列 SPL 示例在列表中指定的位置插于值:
CREATE PROCEDURE test3()
DEFINE a_list LIST(SMALLINT NOT NULL);
SELECT list_col INTO a_list FROM table1 WHERE id = 201;
INSERT AT 3 INTO TABLE(a_list) VALUES( 9 );
UPDATE table1 VALUES list_col = a_list WHERE id = 201;
END PROCEDURE;
假设在此 INSERT 之前, a_list 包含了元素 {1,8,4,5,2}。在此 INSERT 之后,a_list 包含元素 {1,8,9,4,5,2}。新元素 9 插入在列表中的位置 3 。要获得更过关于将值插入到集合变量内的信息,请参阅 集合派生表。