返回首页

gbase数据、南大通用产品文档:GBase8s游标查询中的变量

更新日期:2024年09月11日

与游标变量相关的查询可以引用他的作用域中的任意变量。当使用OPEN FOR打开游
标变量时,PL/SQL会计算查询中的任意变量来标识结果集,对于变量的后续修改,不会改
变结果集。若要更改结果集,必须更改变量的值,然后再次为同一查询打开游标变量。
CREATE OR REPLACE PROCEDURE P_5_25 AS
sal employees.salary%TYPE;
sal_multiple employees.salary%TYPE;
factor INTEGER := 2;
cv SYS_REFCURSOR;
BEGIN
OPEN cv FOR 'SELECT salary, salary*? FROM employees WHERE job_id LIKE ''AD_PRES''' using factor ;
LOOP
FETCH cv INTO sal, sal_multiple;
EXIT WHEN cv%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('factor = ' || factor);
DBMS_OUTPUT.PUT_LINE('sal = ' || sal);
DBMS_OUTPUT.PUT_LINE('sal_multiple = ' || sal_multiple);
factor := factor + 1; -- Does not affect sal_multiple
END LOOP;
CLOSE cv;
END;


GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 115 -

--Result:
--factor = 2
--sal = 4400
--sal_multiple = 8800
--factor = 3
--sal = 24000
--sal_multiple = 48000
--factor = 4
--sal = 17000
--sal_multiple = 34000
--factor = 5
--sal = 17000
--sal_multiple = 34000

CREATE OR REPLACE PROCEDURE P_6_26 AS
sal employees.salary%TYPE;
sal_multiple employees.salary%TYPE;
factor INTEGER := 2;
cv SYS_REFCURSOR;
BEGIN
DBMS_OUTPUT.PUT_LINE('factor = ' || factor);
OPEN cv FOR 'SELECT salary, salary*? FROM employees WHERE job_id LIKE ''AD_PRES''' using factor;
LOOP
FETCH cv INTO sal, sal_multiple;
EXIT WHEN cv%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('sal = ' || sal);
DBMS_OUTPUT.PUT_LINE('sal_multiple = ' || sal_multiple);
END LOOP;

factor := factor + 1;

DBMS_OUTPUT.PUT_LINE('factor = ' || factor);

OPEN cv FOR 'SELECT salary, salary*? FROM employees WHERE job_id LIKE ''AD_PRES''' using factor;
LOOP
FETCH cv INTO sal, sal_multiple;
EXIT WHEN cv%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('sal = ' || sal);
DBMS_OUTPUT.PUT_LINE('sal_multiple = ' || sal_multiple);
END LOOP;
CLOSE cv;
END;

GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 116 -


--Result:
--factor = 2
--sal = 4400
--sal_multiple = 8800
--sal = 24000
--sal_multiple = 48000
--sal = 17000
--sal_multiple = 34000
--sal = 17000
--sal_multiple = 34000
--factor = 3
--sal = 4400
--sal_multiple = 13200
--sal = 24000
--sal_multiple = 72000
--sal = 17000
--sal_multiple = 51000
--sal = 17000
--sal_multiple = 51000

GS_GSC_MEMORY_DETAIL
GS_GSC_MEMORY_DETAIL 视图描述当前节点当前进程的全局SysCache 的内存占用
情况,仅在开启GSC 的模式下有数据。需要注意的是,这个查询由于是以数据库内存上下
文分隔的,因此会缺少一部分内存的统计,缺失的内存统计对应的内存上下文名称为
GlobalSysDBCache。
名称
类型
描述
db_id
integer
数据库id。
totalsize
bigint
共享内存总大小,单位Byte。
freesize
bigint
共享内存剩余大小,单位Byte。
usedsize
bigint
共享内存使用大小,单位Byte。

IEEE 标准,实际的范围根据硬件或操作系统的不同可能稍微小些。
GBase 8a MPP Cluster 允许在关键字DOUBLE 后面的括号内选择用位指定精度,
即DOUBLE (X)。0 到23 的精度对应FLOAT 列的4 字节单精度,24 到53 的精
度对应DOUBLE 列的8 字节双精度。
当0<=X<=23 时,
FLOAT(X)与DOUBLE(X)
等价。
同时GBase 8a MPP Cluster 允许使用非标准语法DOUBLE(M,D)(M 是整数位数
和小数位数的总位数,
D 是小数的个数)
,GBase 8a MPP Cluster 保存值时进行四
舍五入。
示例
示例1:定义的列数据类型为DOUBLE。
CREATE TABLE products(productnum DOUBLE);
INSERT INTO products(productnum) VALUES(-19000.44365);
gbase> DESC products;
+------------+--------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+------------+--------+------+-----+---------+-------+
| productnum | double | YES
|
| NULL
|
|
+------------+--------+------+-----+---------+-------+
1 row in set
gbase> SELECT productnum FROM products;
+--------------+
| productnum
|
+--------------+
| -19000.44365 |
+--------------+
1 row in set