返回首页

gbase数据、南大通用产品文档:GBase8s准备语句

更新日期:2024年09月11日

在形式上,
动态 SQL 语句像任何其他写入程序的 SQL 语句一样,
除了它不可包含任何主
变量的名称之外。
准备好的 SQL 语句有两个限制。首先,如果它是 SELECT 语句,则它不可包括
INTO variable 子句。INTO variable 子句指定将列数据放入其内的主变量,而不允许在准备
好的对象的文本中使用主变量。
其次,
不论主变量的名称通常出现在表达式中的任何位置,
都将问号(?)写作 PREPARE 语句中的占位符。仅 PREPARE 语句可指定问号(?)占位
符。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 224 -
您可使用 PREPARE 语句以此形式为执行准备语句。
使用 GBase 8s ESQL/C编写下列示例:

EXEC SQL prepare query_2 from
'SELECT * from orders
WHERE customer_num = ? and order_date > ?';
此示例中的两个问号指示当执行该语句时,在那两个位置使用主变量的值。
您可动态地准备几乎任何 SQL 语句。
您唯一不可准备的语句就是与动态 SQL 和游标管理
直接相关联的语句,
诸如 PREPARE 和 OPEN 语句。
在您准备 UPDATE 或 DELETE 语
句之后,最好测试 SQLWARN 的第五个字段来查看您是否使用了 WHERE 子句(请参
阅 SQLWARN 数组)。
准备语句的结果是表示该语句的数据结构。此数据结构与产生它的字符串不一样。在
PREPARE 语句中,您赋予该数据结构一个名称;它是前面示例中的 query_2。使用此名称
来执行准备好的 SQL 语句。
PREPARE 语句不将字符串限制于一个语句。
它可包含多个用分号分隔的 SQL 语句。
下列
示例展示用 GBase 8s ESQL/C 编写的相当复杂的事务:
strcpy(big_query, "UPDATE account SET balance = balance + ?
WHERE customer_id = ?; \ UPDATE teller SET balance =
balance + ? WHERE teller_id = ?;");
EXEC SQL PREPARE big1 FROM :big_query;
当执行此语句的列表时,主变量必须为六个占位的问号提供值。虽然设置多语句列表更为
复杂,但由于在程序与数据库服务器之间发生更少的交换,因此性能往往更好。

基本LOOP语句中的CONTINUE WHEN语句 ...........................................
- 49 -

首字词操作符‘^’
操作符含义
要想查询以某个词开头的信息,可在查询词前面加上^符号,注意^符号与词之间

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
936
不能有空格。例如查询'^南',表示查询以南字开头的信息。
示例
示例:搜索以南大词组开头的短信内容
gbase> SELECT * FROM sms WHERE contains(MB_Text, '^"南大"');
+-----------+--------------------------------------------------+
|no
| text
|
+-----------+--------------------------------------------------+
|13023315123| 南大开设java 编程培训班,每周五晚上7:00-9:00 上课|
|13323315181| 南大通用数据技术股份有限公司地址:...
|
+-----------+--------------------------------------------------+
2 row in set