返回首页

gbase数据、南大通用产品文档:GBase8sSQL 通信区域

更新日期:2024年09月11日

数据库服务器始终在一个称为“SQL 通信区域”(SQLCA)的数据结构中返回结果代码,
以及关于操作结果的其他可能信息。如果数据库服务器在用户定义的例程中执行 SQL 语
句,则调用应用程序的 SQLCA 包含在该例程中 SQL 语句触发的值。
在从 表 1 至 表 1 中罗列 SQLCA 的主体字段。在编程语言之中,您用来描述诸如
SQLCA 这样的数据结构的语法,
以及您用来应用其中字段的语法是不同的。
要了解详细信
息,请参阅您的 SQL API 出版物。
特别地,您通过其命名 SQLERRD 和 SQLWARN 数组的一个元素的下标是不同的。在
GBase 8s ESQL/C 中,
数组元素从零开始编号,
但在其他语言中,
从一开始。
在本讨论中,
以诸如 third 这样的特定词命名字段,且您必须将这些词翻译成您的编程语言的语法。
您还可使用 GET DIAGNOSTICS 语句的 SQLSTATE 变量来检测、处理和诊断错误。请
参阅 SQLSTATE 值。

......................................... - 692 -

功能说明
DECLARE 语句用来声明局部变量。
说明

DECLARE 只能被用在BEGIN...END 复合语句之间,
且必须位于其它语句
之前。

游标必须在声明处理器变量之前被声明,并且条件必须在声明游标或处理
器前声明。

局部变量的作用范围在它被声明的BEGIN...END 块之间。
变量可以在嵌套
块中使用,除非在块中声明了同名的变量。
语法格式
DECLARE var_name[,...] type [DEFAULT value]
表5- 173 参数说明

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1349
参数名称


var_name
变量名
type
变量数据类型,值为GBase 8a MPP Cluster 支持的数据类型
DEFAULT value
设置变量的默认值。
这个值可以指定为一个表达式,或一
个常量。如果DEFAULT 缺少子句,初始值为NULL。
示例
示例1:DECLARE intX INT
gbase> DELIMITER //
gbase> DROP PROCEDURE IF EXISTS dodeclare //
Query OK, 0 rows affected
gbase> CREATE PROCEDURE dodeclare (p1 INT)
BEGIN
DECLARE intX INT;
SET intX = 0;
REPEAT SET intX = intX + 1; UNTIL intX > p1 END REPEAT;
SELECT intX;
END //
Query OK, 0 rows affected
gbase> DELIMITER ;
gbase> CALL dodeclare(1000);
+------+
| intX |
+------+
| 1001 |
+------+
1 row in set
Query OK, 0 rows affected
示例2:DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1
gbase> DELIMITER //
gbase> DROP PROCEDURE IF EXISTS curdemo //
Query OK, 0 rows affected
gbase> CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE cnt INT DEFAULT 0;
DECLARE s_region CHAR(255);
DECLARE stmp CHAR(255) DEFAULT '';

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1350
DECLARE cur_region CURSOR FOR SELECT DISTINCT
c_region FROM ssbm.customer ORDER BY c_region LIMIT 1000;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'
SET done = 1;
DROP TABLE IF EXISTS products;
CREATE TABLE products(region CHAR(255),count INT);
OPEN cur_region;
REPEAT
FETCH cur_region INTO s_region;
IF NOT done THEN
IF
stmp=''
THEN
SET stmp=s_region;
SET cnt=1;
END IF;
IF stmp!=s_region
THEN
INSERT INTO products(region,count)
VALUES(stmp,cnt);
SET cnt=1;
SET stmp=s_region;
END IF;
SET cnt=cnt+1;
END IF;
UNTIL done END REPEAT;
CLOSE cur_region;
INSERT INTO products(region,count) VALUES(stmp,cnt);
END //
Query OK, 0 rows affected
gbase> DELIMITER ;
gbase> CALL curdemo;
Query OK, 1 row affected
gbase> SELECT region,count FROM products;
+-----------------------------------------------------------+-------+
|region
|count|
+-----------------------------------------------------------+-------+
|AFRICA
|
2 |
|AMERICA
|
2 |
|ASIA
|
2 |
|EUROPE
|
2 |
|MIDDLEEAST
|
2 |
+------------------------------------------------------------+-------+
5 rows in set

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1351