南大通用GBase8s 常用SQL语句(173)
在参数已知时准备语句
在一些准备好的语句中,在准备语句时所有必需的信息都已知。下列在 GBase 8s ESQL/C 中的示例展示从常量数据准备了的两个语句:
sprintf(redo_st, "%s %s",
"drop table workt1; ",
"create table workt1 (wtk serial, wtv float)" );
EXEC SQL prepare redotab from :redo_st;
准备接收参数的语句
在一些语句中,在准备语句时参数还未知,因为每次执行该语句时可插入不同的值。在这些语句中,在当执行语句时必须提供参数的地方,您可使用问号(?)占位符。
下列 GBase 8s ESQL/C 示例中的 PREPARE 语句展示问号(?)占位符的一些使用:
EXEC SQL prepare s3 from
'select * from customer where state matches ?';
EXEC SQL prepare in1 from 'insert into manufact values (?,?,?)';
sprintf(up_query, "%s %s",
"update customer set zipcode = ?"
"where current of zip_cursor");
EXEC SQL prepare update2 from :up_query;
EXEC SQL prepare exfunc from
'execute function func1 (?, ?)';
对于表达式,但不对于 SQL 标识符,您可使用占位符来延缓计算值,直到运行时为止,除了在 以 SQL 标识符准备语句 中注明之外。
下列 GBase 8s ESQL/C 代码片段的示例从名为 demoquery 的变量准备语句。变量中的文本包括一问号(?)占位符。该准备好的语句与一游标相关联,且当打开该游标时,OPEN 语句的 USING 子句为该占位符提供值:
EXEC SQL BEGIN DECLARE SECTION;
char queryvalue [6];
char demoquery [80];
EXEC SQL END DECLARE SECTION;
EXEC SQL connect to 'stores_demo';
sprintf(demoquery, "%s %s",
"select fname, lname from customer ",
"where lname > ? ");
EXEC SQL prepare quid from :demoquery;
EXEC SQL declare democursor cursor for quid;
stcopy("C", queryvalue);
EXEC SQL open democursor using :queryvalue;
在与游标以及 EXECUTE 语句(所有其他的准备好的语句)关联的两个 OPEN 语句中,USING 子句都可用。
您可使用问号(?)占位符来表示 GBase 8s ESQL/C 或 SPL 集合变量的名称。
评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526