返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

30.7. 动态 SQL

发布于 2019-09-30 03:08:16 字数 1397 浏览 879 评论 0 收藏 0

在许多情况下,应用要执行的具体的 SQL 语句在书写应用的时候就已经知道了。 不过,在某些情况下,SQL 语句是在运行时或者由外部的数据提供的。 在这种情况下,我们不能直接在 C 代码嵌入 SQL 语句,但是有个机制可以允许你调用放在一个字串变量里的任何 SQL 语句。

执行任意 SQL 语句最简单的方法是使用 EXECUTE IMMEDIATE 命令。比如:

EXEC SQL BEGIN DECLARE SECTION;const char *stmt = "CREATE TABLE test1 (...);";EXEC SQL END DECLARE SECTION;EXEC SQL EXECUTE IMMEDIATE :stmt;

你不能用这个办法执行检索数据的语句(也就是说,SELECT )。

执行任意 SQL 语句的更强大的方法是准备这些语句一次,并且执行这些准备好的语句任意多次。 我们也可以准备一个普遍的语句版本,然后通过替换一些参数, 执行一个特定的版本。在准备语句的时候,在你稍后需要替换参数的地方书写一个问号。比如:

EXEC SQL BEGIN DECLARE SECTION;const char *stmt = "INSERT INTO test1 VALUES(?, ?);";EXEC SQL END DECLARE SECTION;EXEC SQL PREPARE mystmt FROM :stmt; ...EXEC SQL EXECUTE mystmt USING 42, 'foobar';

如果你在执行的语句返回数值,那么增加一个 INTO 子句:

EXEC SQL BEGIN DECLARE SECTION;const char *stmt = "SELECT a, b, c FROM test1 WHERE a > ?";int v1, v2;VARCHAR v3;EXEC SQL END DECLARE SECTION;EXEC SQL PREPARE mystmt FROM :stmt; ...EXEC SQL EXECUTE mystmt INTO v1, v2, v3 USING 37;

一个 EXECUTE 命令可以有一个 INTO 子句, 一个 USING 子句,也可以两个都有或者两个都没有。

如果你不再需要已准备好的语句,你应该释放它:

EXEC SQL DEALLOCATE PREPARE name;

<
PrevHomeNext
使用宿主变量Up使用 SQL 描述符范围

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文