快捷搜索: 王者荣耀 脱发

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 子句中罗列程序变量来提供缺少

的值。

经验分享 程序员 微信小程序 职场和发展