INSERT

INSERT 语句使用提供的值将一行或多行插入表中。

调用

此语句可以在使用 DB2 CLI 函数的应用程序中使用,也可以通过 CLP 发出。

语法

>>-INSERT INTO--table-name--+-----------------------+----------->
                            |    .-,-----------.    |
                            |    V             |    |
                            '-(----column-name-+--)-'
 
                .-,--------------.
                V                |
>--+-VALUES--(----| expression |-+--)-+------------------------><
   '-SELECT-statement-----------------'
 
expression:
 
   .-Operator--------------------.
   V                             |
|----+---+--+-literal----------+-+------------------------------|
     +-+-+  +-special register-+
     '---'  +-function---------+
            '-(expression)-----'
 
operator:
 
|--+-/-+--------------------------------------------------------|
   +-*-+
   +-+-+
   '---'
 
 

描述

INTO table-name
标识插入操作的表。名称必须标识现有的表,但不能用来标识目录表。
(column-name,...)
指定为其提供插入值的列。每个名称都必须是标识一个表列的未限定名。不得多次标识同一个列。

省略列列表是列表的隐式规范,在此列表中,每个表列都按从左到右的顺序标识。

VALUES
引入要插入的一行值。

每行的值的数目必须等于列列表中的名称数目。第一个值被插入到列表中的第一列中,第二个值被插入到第二列中,依此类推。

expression
表达式(expression)可以是文字、专用寄存器、函数或复杂表达式。

不支持对 CHAR、VARCHAR、BLOB(n)、DATE、TIME 和 TIMESTAMP 数据类型执行算术运算。

literal
文字(literal)可以是任何支持的数据类型为 INTEGER、SMALLINT、DECIMAL、 CHAR(n)、VARCHAR(n)、BLOB(n)、DATE、TIME 或 TIMESTAMP 的值。
special register
专用寄存器 CURRENT DATE、CURRENT TIME 和 CURRENT TIMESTAMP 可用来生成当前的日期、时间和时间戳记。
SELECT-statement
可以按 SELECT 语句的结果表的格式来指定一些新行。可以是一行、多行,或者不指定任何行。如果结果表是空的,则 SQLCODE 会被设置为 +100,SQLSTATE 被设置为 '02000'。选择语句的基本对象不能是 INSERT 的基本对象。

规则

缺省值
将缺省值或空值插入到不在列列表中的任何列中。必须在列列表中包括不允许缺省值或空值的列。

长度
如果一个列的插入值是数字,则该列必须是数字列,且具有表示该数字的整数部分的容量。如果一个列的插入值是字符串,则该列必须是字符串列,且长度属性至少与该字符串的长度一样大。

赋值
根据 DB2 Universal Database SQL Reference 中描述的赋值规则,将插入值赋给各列。

示例

示例 1:将一个具有下列信息的雇员插入到 EMPLOYEE 表中:

INSERT INTO EMPLOYEE 
 VALUES ('002001', 'John', 'Harrison', '600', '4900', 50000, '01/12/1989')

示例 2:将一个具有下列信息的新雇员插入到 EMPLOYEE 表中:

     INSERT INTO EMPLOYEE (EMPNO, FIRSTNAME, LASTNAME)
       VALUES ('003002', 'Jim', 'Gray')

示例 3:创建表 EMP_ACT_COUNT。将 EMP_ACT 表中具有涉及到项目号的雇员号(EMPNO)的那些行装入 EMP_ACT_COUNT 中。

CREATE TABLE EMP_ACT_COUNT
   ( EMPNO CHAR(6)  NOT NULL,
     COUNT          INTEGER)
 
INSERT INTO EMP_ACT_COUNT 
    SELECT EMPNO, COUNT(*)
   FROM EMP_ACT
   GROUP BY EMPNO  

限制:

  1. SELECT 语句的列数据类型必须与目标表的列定义完全相同(除了可空性之外)。
  2. 不允许使用 ORDER BY 和 LIMIT 子句。

相关参考