GBase8s数据库PUT语法在 INSERT 中使用常量值
VALUES 子句罗列插入的列的值。这些值中的一个或多个可为常量(即,数字或字符串)。
当所有插入的值都是常量时,PUT 语句有一特殊的作用。PUT 语句仅增大计数器,而不创建行并放
入缓冲区中。当您使用 FLUSH 或 CLOSE 语句来清空缓冲区时,将一行和重复计数发送到数据库服
务器,插入那个编号的行。在下列 GBase 8s ESQL/C 示例中,将 99 个空客户记录插入到customer 表内。因为所有值都是常量,直到该游标关闭才会发生磁盘输出。(customer_num 的常
量零导致生成 SERIAL 值。)下列示例将 99 个空客户记录插入到客户表内:
int count;
EXEC SQL declare fill_c cursor for
insert into customer(customer_num) values(0);
EXEC SQL open fill_c;
for (count = 1; count <= 99; ++count)
EXEC SQL put fill_c;
EXEC SQL close fill_c;
在 INSERT 中命名程序变量
当您将 INSERT 语句与游标(在 DECLARE 语句中)相关联时,请创建 Insert 游标。在
INSERT 语句中,您可在 VALUES 子句中命名程序变量。当执行每一 PUT 语句时,使用那个时
刻的程序变量的内容来填写插入到缓冲区内的行。
如果您正在(随同 INSERT 使用 DECLARE)创建 Insert 游标,则必须在该 VALUES 子句中仅
使用程序变量。在准备好的语句的上下文中不识别变量名称;您通过其语句标识符将准备好的语句
与游标关联。
下列 GBase 8s ESQL/C 示例展示 Insert 游标的使用。代码包括下列语句:
DECLARE 语句将名为 ins_curs 的游标与 INSERT 语句相关联,该 INSERT 语句将数据
插入到 customer 表内。
VALUES 子句指定名为 cust_rec 的数据结构;GBase 8s ESQL/C 预处理器将 cust_rec 转
化为值的列表,每一结构的组件一个。
OPEN 语句创建一缓冲区。
用户定义的函数(未在此示例内定义)从用户输入获取客户信息并将其保存在 cust_rec中。
PUT 语句从 cust_rec 结构的当前内容组成一行,并将其发送到行缓冲区。
CLOSE 语句将留在行缓冲区中的任何行都插入到 customer 表内,并关闭 Insert 游标:
int keep_going = 1;
EXEC SQL BEGIN DECLARE SECTION
struct cust_row { /* fields of a row of customer table */ } cust_rec;
EXEC SQL END DECLARE SECTION
EXEC SQL declare ins_curs cursor for
insert into customer values (:cust_row);
EXEC SQL open ins_curs;
while ( (sqlca.sqlcode == 0) && (keep_going) )
{
keep_going = get_user_input(cust_rec); /* ask user for new customer */
if (keep_going ) /* user did supply customer info
*/{
cust_rec.customer_num = 0; /* request new serial value */
EXEC SQL put ins_curs;
}
if (sqlca.sqlcode == 0) /* no error from PUT */
keep_going = (prompt_for_y_or_n(“another new customer”) ==‘Y’)
}
EXEC SQL close ins_curs;
如果插入的数据可能为 NULL ,则请使用指示符变量。
当准备 INSERT 语句时(请参阅 PREPARE 语句),您不可在它的 VALUES 子句中使用程序变
量,但可通过问号(
?)占位符表示值。请在 PUT 语句的 FROM 子句中罗列程序变量来提供缺少
的值。