除了在 在单一语句准备中受限的语句 中罗列的作为例外的语句,您不可在多语句的准备好的对象 的文本中使用下列语句:
⚫ CLOSE DATABASE
⚫ CREATE DATABASE
⚫ DATABASE
⚫ DROP DATABASE
⚫ RENAME DATABASE
⚫ SELECT(随同一个例外)
在多语句准备中,下列语句的类型也是无效的:
⚫ 在执行多语句序列期间可导致当前数据库关闭的语句
⚫ 包括对 TEXT 或 BYTE 主变量引用的语句
通常,您在多语句准备中不可使用 SELECT 语句。唯一在多语句准备中被允许的 SELECT 语句的 形式为带有 INTO 临时表子句的 SELECT 语句。
为了效率而使用准备好的语句
要提高执行效率,您可在循环中使用 PREPARE 语句和 EXECUTE 语句,来消除冗余解析和优化 所引起的开销。例如,每次循环运行时,都解析位于 WHILE 循环内的 UPDATE 语句。如果您在 该循环之外准备 UPDATE 语句,则仅解析该语句一次,消除开销并提高了语句执行的速度。下列 示例展示如何准备一 GBase 8s ESQL/C 语句来提高性能:
EXEC SQL BEGIN DECLARE SECTION; char disc_up[80]; int cust_num; EXEC SQL END DECLARE SECTION; main() { sprintf(disc_up, "%s %s","update customer ", "set discount = 0.1 where customer_num = ?"); EXEC SQL prepare up1 from :disc_up; while (1) { printf("Enter customer number (or 0 to quit): "); scanf("%d", cust_num); if (cust_num == 0) break; EXEC SQL execute up1 using :cust_num; } }
GBase 8s SQL 指南:语法 南大通用数据技术股份有限公司 595
如同 SQL 语句高速缓存一样,准备好的语句可降低重新优化同一查询计划的频度,从而节约在一 些上下文中的资源。准备好的语句和语句高速缓存 部分讨论综合地使用准备好的 DML 语句、游 标和 SQL 语句高速缓存或提升查询性能的替代技术。




