南大通用GBase 8s 静态游标介绍

原文链接:https://www.gbase.cn/community/post/4377
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

GBase 8s兼容O的PL/SQL编程语言,包括PL/SOL支持的数据类型,变量声明、赋值语法,顺序、选择、循环分支语法,集合、记录对象的使用,静态SQL、动态SQL语法以及错误处理等。本文主要介绍在数据库编程中,静态游标的使用方法。GBase 8s数据库提供了两种类型的静态游标:隐式游标和显式游标。本文将详细介绍GBase 8s中的静态游标,包括它们的使用场景、特点以及如何有效利用它们来提高数据库操作的效率。

静态游标是只读游标,它总是按照打开游标时的原样显示结果集,在编译时就能确定静态游标使用的查询。

隐式游标:

隐式游标无需用户进行定义,每当用户在兼容O模式 的 PL/SQL 程序中执行一个 DML 语句(INSERT、UPDATE、DELETE)或者 SELECT...INTO 语句时,会自动声明一个隐式游标并管理这个游标。

1、隐式游标的特点:
  • 隐式游标是由PL/SQL 来管理的, 即不需要声明游标语句, 也不需要OPEN,FETCH,CLOSE 操作;
  • 隐式游标中必须要有select cur_name into [ 变量名或其他数据类型]. 此句完成OPEN,FETCH,CLOSE 操作;
  • 隐式游标只能返回一行记录, 如果无符合条件的记录将会出现NO_DATA_FOUND 异常. 如果出现多条记录将出现TOO_MANY_ROWS 异常;
  • 隐式游标只能用SQL% 判断其游标属性;
  • 对于任何位置使用SQL%ISOPEN 结果都是FALSE, 隐式游标由PL/SQL 管理;
  • 对于在隐式游标位置前使用SQL%FOUND 或SQL%NOTFOUND, SQL%ROWCOUNT 结果值是NULL( 不确定值)。
2、隐式游标支持的属性:

SQL%ISOPEN

(1)含义:游标是否打开;

(2)始终返回false,因为隐式游标在关联语句执行完后永远是关闭的。

SQL%FOUND

(1)含义:是否有行受影响;

(2)返回NULL:没有select或dml运行;

(3)返回TRUE:有返回,影响一行或多行;

(4)返回FALSE:其它情况。

SQL%NOTFOUND

(1)含义:是否没有受影响的行;

(2)返回NULL:没有select或dml运行;

(3)返回TRUE:其它情况;

(4)返回FALSE:有返回,影响一行或多行。

SQL%ROWCOUNT

(1)含义:返回被影响的行数;

(2)返回NULL:没有select或dml运行;

(3)返回其它值:影响的行数。

显示游标

1、显示游标的特点:

(1)显式游标由用户构造和管理;

(2)必须声明显示游标,并给他命名和关联一个查询语句;

(3)显示游标不支持赋值,不能在表达式中使用,不能作为子程序的参数或宿主变量使用;

(4)如不得不使用,则选择使用游标变量来实现。

2、使用显示游标的步骤:

(1)定义游标:声明游标及其关联的查询语句;

(2)打开游标:执行游标关联的语句,将查询结果装入游标工作区,将游标定位到结果集的第一行之前;

(3)拨动游标:根据应用需要将游标位置移动到结果集的合适位置;

(4)关闭游标:游标使用完后应关闭,以释放其占有的资源。

3、游标的使用:

游标声明和定义

DECLARE
   --声明c1
   CURSOR c1 RETURN departments%ROWTYPE;  
   --声明并定义c2
   CURSOR c2 IS SELECT employee_id, job_id, salary FROM employees WHERE salary > 2000;
   --定义c1
   CURSOR c1 RETURN departments%ROWTYPE IS SELECT * FROM departments WHERE department_id = 110;
   --声明c3
   CURSOR c3;      
   --定义c3
   CURSOR c3 IS SELECT * FROM locations  WHERE country_id = 'JP';
BEGIN
   NULL;
END;
/

into到普通变量

--创建表
create table t(id int,name varchar(10));
insert into t values(1,'jack');
insert into t values(2,'jerry');
declare 
   v1 int;
   v2 varchar(10);
   cursor c1 is select id, name from t;
begin
   open c1;
   loop
       fetch c1 into v1,v2;
       exit when c1%notfound;
       dbms_output.put_line('id = '||v1);
       dbms_output.put_line('name = '||v2);
   end loop;
   
   close c1;
end;
/

into到record类型变量

--创建表
create table t(id int,name varchar(10));
insert into t values(1,'jack');
insert into t values(2,'jerry');
declare 
   v t%rowtype;
   cursor c1 is select id, name from t;
begin
   open c1;
   loop
       fetch c1 into v;
       exit when c1%notfound;
       dbms_output.put_line('id = '||v.id);
       dbms_output.put_line('name = '||v.name);
   end loop;
   
   close c1;
end;
/

带参数的游标(调用前open)

--创建表
create table t(id int,name varchar(10));
insert into t values(1,'jack');
insert into t values(2,'jerry');

declare
cursor c (c_id int) is select name from t where id = c_id;
--定义存储过程
procedure p1 is
p_name varchar(10);
begin
   loop   
    fetch c into p_name;
    exit when c%notfound;
   dbms_output.put_line('result is: '||p_name);
    end loop;   
end;

begin
    open c(2);   --打开游标
   p1;   --调用存储过程
    close c;    --关闭游标
end;
/

通过本文的详细介绍,您了解GBase 8s中的静态游标及其应用。合理使用游标不仅可以提高数据库查询的效率,还可以使代码更加清晰和易于维护。希望本文能帮助您更好地利用GBase 8s的游标功能,感谢您的阅读。

原文链接:https://www.gbase.cn/community/post/4377
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值