返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

GBase JDBC 与jdk 的兼容性
GBase JDBC 与jdk 的兼容性如下表格所示:
GBase JDBC 版本
jre 版本

打开一个显式游标后,能够用FETCH获得结果集中的每条数据。
FETCH cursor_name INTO into_clause
其中INTO_clause可以是变量列表或者是单个记录变量。对于查询返回的每一列,变
量列表或记录变量必须有对应的兼容类型的变量。%TYPE和%TYPEROW对声明在FETHCH
语句中的变量或记录变量非常有用。
FETCH语句获得结果集的当前行,将当前行的值存到变量或记录变量中,然后将游标
下移到下一行。
通常在循环中使用FETCH语句,该循环当FETCH语句运行了所有的行后退出,为了检
测退出条件,可以使用%NOFOUND属性。FETCH语句没有返回值时,PL/SQL不会引起异
常。
CREATE OR REPLACE PROCEDURE P_6_8 AS

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

v_lastname employees.last_name%TYPE; -- variable for last_name
v_jobid employees.job_id%TYPE; -- variable for job_id
v_employees employees%ROWTYPE; -- record variable for row of table

CURSOR c1 IS
SELECT last_name, job_id FROM employees WHERE job_id='AD_PRES' ORDER BY last_name;
CURSOR c2 IS
SELECT * FROM employees WHERE job_id='AD_PRES' ORDER BY job_id;
BEGIN
OPEN c1;
LOOP -- Fetches 2 columns into variables
FETCH c1 INTO v_lastname, v_jobid;
EXIT WHEN c1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_lastname);
END LOOP;
CLOSE c1;
DBMS_OUTPUT.PUT_LINE( '-------------------------------------' );

OPEN c2;
LOOP -- Fetches entire row into the v_employees record
FETCH c2 INTO v_employees;
EXIT WHEN c2%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_employees.last_name);
END LOOP;
CLOSE c2;
END;

--Atkinson ST_CLERK
--Bell SH_CLERK
--Bissot ST_CLERK
--PL/SQL procedure successfully completed.

CREATE OR REPLACE PROCEDURE P_6_9 AS
CURSOR c IS
SELECT e.job_id, j.job_title FROM employees e, jobs j
WHERE e.job_id = j.job_id AND e.manager_id = 100 ORDER BY last_name;
-- Record variables for rows of cursor result set:
job1 c%ROWTYPE;
job2 c%ROWTYPE;
job3 c%ROWTYPE;
job4 c%ROWTYPE;
job5 c%ROWTYPE;

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

BEGIN
OPEN c;
FETCH c INTO job1; -- fetches first row
FETCH c INTO job2; -- fetches second row
FETCH c INTO job3; -- fetches third row
FETCH c INTO job4; -- fetches fourth row
FETCH c INTO job5; -- fetches fifth row
CLOSE c;
DBMS_OUTPUT.PUT_LINE(job1.job_title || ' (' || job1.job_id || ')');
DBMS_OUTPUT.PUT_LINE(job2.job_title || ' (' || job2.job_id || ')');
DBMS_OUTPUT.PUT_LINE(job3.job_title || ' (' || job3.job_id || ')');
DBMS_OUTPUT.PUT_LINE(job4.job_title || ' (' || job4.job_id || ')');
DBMS_OUTPUT.PUT_LINE(job5.job_title || ' (' || job5.job_id || ')');
END;

--Result:
--Sales Manager (SA_MAN)
--Administration Vice President (AD_VP)
--Sales Manager (SA_MAN)
--Stock Manager (ST_MAN)
--Marketing Manager (MK_MAN)
--PL/SQL procedure successfully completed.

函数说明
返回一个重复了count 次的字符串str 组成的字符串。
如果count<=0,
返回一个空
字符串;如果str 或count 是NULL,返回值为NULL。count 值范围为bigint。
示例
示例1:返回将“GBase”重复3 次后的字符串。
gbase> SELECT REPEAT('GBase', 3) FROM dual;
+--------------------+
| REPEAT('GBase', 3) |
+--------------------+
| GBaseGBaseGBase
|
+--------------------+
1 row in set
注意

若repeat(str , count) 中,str 所占用字节数*count > 16M,
请在集群配置文件中[gbased]栏增加max_allowed_packet
= 64M。
因为repeat 虽然允许单个最大元组为64M,但是客
户端默认配置max_allowed_packet 为16M,
会将大于16M
的内容拦截,并报错处理。