暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBASE数据库在 ESQL/C 中可执行几个 SQL 语句作为一个活动

三金先生 2023-08-23
110

在 ESQL/C 中,您可执行几个 SQL 语句作为一个活动,如果您将它们包括在同一 PREPARE 语 句中。将多语句文本作为一个单元处理;不是顺序地处理这些活动。因此,多语句文本不可包括那 些依赖于该文本中先前的语句中发生的活动的语句。例如,您不可创建表并将值插入到同一准备好 的语句块中的那个表内。

如果多语句准备中的一个语句返回错误,则停止执行这个准备好的语句。数据库服务器不执行任何 余下的语句。在多数情况下,编译的产品返回关于错误的错误状态信息,但不指出文本中的哪一语 句导致错误。您可使用 sqlca 中的 sqlca.sqlerrd[4] 字段来发现错误的偏移量。

在多语句准备中,如果在下列语句中从 WHERE 子句未返回行,则数据库服务器返回 SQLNOTFOUND (100):

⚫ UPDATE … WHERE …

⚫ SELECT INTO TEMP … WHERE …

⚫ INSERT INTO … WHERE …

⚫ DELETE FROM … WHERE …

在下一示例中,四个 SQL 语句被准备到称为 query 的单一 GBase 8s ESQL/C 字符串内。以分号 分隔单独的语句。

单个 PREPARE 语句可准备该四个语句执行,且单个 EXECUTE 语句可执行与 qid 语句标识符相关 联的语句:

sprintf (query, "%s %s %s %s %s %s %s", "update account set balance = balance + ? ", "where acct_number = ?;", "update teller set balance = balance + ? ", "where teller_number = ?;", "update branch set balance = balance + ? ", "where branch_number = ?;", "insert into history values (?, ?);"; EXEC SQL prepare qid from :query; EXEC SQL begin work; EXEC SQL execute qid using :delta, :acct_number, :delta, :teller_number, :delta, :branch_number, :timestamp, :values; EXEC SQL commit work;

此处需要分号(;)作为在 query 持有的文本中每一 SQL 语句之间的 SQL 语句结束符号。 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论