动态 SQL 与嵌入式 SQL 概述
1. 动态 SQL 技术简介
嵌入式静态 SQL 在很多场景下有用,但有时不够灵活。例如基于 GUI 的应用程序,允许用户通过下拉列表选择列名、表名和 WHERE 子句条件来构建临时查询。而静态 SQL 由于其处理 SQL 语句执行的五个步骤(在编译时完成前四个步骤:解析、验证、优化和生成二进制执行计划),无法动态构建查询,其 SQL 语句是硬编码在程序中的,只能替换部分标记的值。
动态 SQL 则通过将所有五个步骤推迟到实际运行时,解决了这个问题。它可以在程序执行期间根据用户提供的参数(如表名、列名、搜索条件等)动态构建 SQL 语句。
1.1 动态 SQL 的两种类型
动态 SQL 一般可分为两类:
- 动态构建的 DML 和 DDL 语句。
- 动态查询。
这两类的区别源于 SQL 处理的特殊性。SELECT 语句处理有一个额外步骤,即返回有组织形式的查询结果。而 DML 或 DDL 语句只有成功或失败两种情况,通常只需从 RDBMS 获取返回码(SQLCODE 或 SQLSTATE);SQL 查询则返回结果集,其列数和列的数据类型在实际程序执行前可能未知,这意味着主机程序需要在动态查询构建完成并提交给 RDBMS 执行前,分配合适的数据结构来存储预期的结果集。因此,动态 DML/DDL 处理比动态查询简单。现代编程语言通常会将复杂部分委托给内部机制,程序员只需动态组装表示动态查询的字符串并赋值给相应变量。
1.2 动态 SQL 与 SQL99 标准
ANSI/ISO 标准与各厂商的实际实现往往不同,动态 SQL 也是如此。早在
超级会员免费看
订阅专栏 解锁全文
3534

被折叠的 条评论
为什么被折叠?



