问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

PL/SQL里的游标到底是干啥用的啊!言简意赅呀 筒子们!

发布网友 发布时间:2022-04-10 02:58

我来回答

4个回答

懂视网 时间:2022-04-10 07:20

游标 :是一个指向上下文的句柄( handle)或指针。通过游标,PL/SQL可以控制上下文区和处理语句时上下文区会发生些什么事情。
定义游标:就是定义一个游标名,以及与其相对应的SELECT 语句 ,     其    一般形式为:
   CURSOR cursor_name IS  select_statement;
打开游标:就是执行游标所对应的SELECT 语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识游标结果集合。
OPEN cursor_name;

提取游标:就是检索结果集合中的数据行,放入指定的输出变量中。
FETCH cursor_name INTO {variable_list | record_variable };

关闭游标:当提取和处理完游标结果集合数据后,应及时关闭游标,以释放该游标所占用的系统资源,并使该游标的工作区变成无效,不能再使用FETCH 语句取其中数据

CLOSE cursor_name;

例如:DECLARE
     v_ename  emp.ename%TYPE;
       v_sal      emp.sal%TYPE;
       CURSOR c_cursor IS SELECT ename, sal FROM emp WHERE rownum<11;
BEGIN
OPEN c_cursor;
FETCH c_cursor INTO v_ename, v_sal;
WHILE c_cursor %FOUND LOOP
   DBMS_OUTPUT.PUT_LINE(v_ename||’---‘||to_char(v_sal) );
   FETCH c_cursor INTO v_ename, v_sal;
END LOOP;
CLOSE c_cursor;
END;
PL/SQL语言提供了游标FOR循环语句,自动执行游标的OPEN、FETCH、CLOSE语句和循环语句的功能。

FOR index_variable IN cursor_name[value[, value]…] LOOP
    -- 游标数据处理代码
END LOOP;
例如:DECLARE
       CURSOR c_sal IS SELECT empno, ename, sal FROM emp ;
BEGIN
--隐含打开游标
   FOR v_sal IN c_sal LOOP
   --隐含执行一个FETCH语句
   DBMS_OUTPUT.PUT_LINE( to_char(v_sal.empno)||’---‘||v_sal.ename||’---‘||to_char(v_sal.sal)) ;
   --隐含监测c_sal%NOTFOUND
   END LOOP;
--隐含关闭游标
END;
游标变量也是一个指向多行查询结果集合中当前数据行的指针。但与游标不同的是,游标变量是动态的,而游标是静态的。
游标变量为一个指针,它属于参照类型,所以在声明游标变量类型之前必须先定义游标变量类型。在PL/SQL中,可以在块、子程序和包的声明区域内定义游标变量参照类型。
TYPE ref_type_name IS REF CURSOR [ RETURN return_type]
 打开游标变量时使用的是OPEN…FOR 语句。格式为:
OPEN {cursor_variable_name | :host_cursor_variable_name}
    FOR select_statement;

使用FETCH语句提取游标变量结果集合中的数据。格式为:
FETCH {cursor_variable_name | :host_cursor_variable_name}
    INTO {variable [, variable]…| record_variable};

CLOSE语句关闭游标变量,格式为:
CLOSE {cursor_variable_name | :host_cursor_variable_name

游标变量应用举例:

例:BEGIN
    IF selection=’D’ THEN
        OPEN refcur FOR SELECT deptno, dname FROM dept;
        DBMS_OUTPUT.PUT_LINE(‘Department data’);
    ELSIF selection=’E’ THEN
        OPEN refcur FOR SELECT empno, ename||’ is a ‘||job FROM emp;
        DBMS_OUTPUT.PUT_LINE(‘Employee data’);
    ELSE
        DBMS_OUTPUT.PUT_LINE(‘Please enter ‘‘D’’ or ‘‘E’’ ’);
        RETURN;
    END IF;
    DBMS_OUTPUT.PUT_LINE(‘----------------------‘);
    FETCH refcur INTO sample;
    WHILE refcur%FOUND LOOP
        DBMS_OUTPUT.PUT_LINE(sample.id||’: ‘||sample.description);
        FETCH refcur INTO sample;
    END LOOP;
    CLOSE refcur;
    END;


 

PL/SQL中的游标

标签:sample   otf   close   tput   动态   不同   释放   script   for循环语句   

热心网友 时间:2022-04-10 04:28

简单的告诉你,就是可以读取结果集的数据 ,就是可以读取select*from table的数据

热心网友 时间:2022-04-10 05:46

可以对查询的结果进行逐一的读取(提取)。

热心网友 时间:2022-04-10 07:20

循环获取查询结果
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
汽车胎扎了个钉子是拔还是不拔? 台式机电源什么牌子好 台式机电源有哪些牌子 金牌 银牌 铜牌电源哪个好 台式机电源等级性能解析 电脑电源推荐-全汉(FSP) 500W银牌(88%)全模组SFX电源 我的妻子背叛了我,我该怎么办, 初一语文复习材料(急急急!!!) 绿色蝈蝈课后题答案七上语文 女人梦见黄鼠狼的七大预兆 怎么知道注塑机螺杆有无卡死现象? 请问为什么在钢之炼金术师fa里,爱德华一开始不用炼金术换 藏獒斗狗-斗狗能打过大狼狗吗?? 罗威纳PK藏獒 总说藏獒是最凶猛的犬,我看的视频它一只狗也打不过 比特犬咬死藏獒的视频是真的吗?藏獒不是世界上最凶猛的犬类吗? 藏獒视频下载 藏獒与老虎打架视频 藏獒与狼打架视频 一只真正的纯种藏獒能打过几只狼? 藏獒vs比特犬谁会赢? 藏獒真的那么厉害吗?看到一些视频,藏獒其实战斗力中上。很多斗狗,都比他强。你们是怎么想的。 藏獒斗比特犬视频 藏獒咬死斗狗视频 青岛期货公司开户,青岛期货开户? 青岛期货开户营业部在哪里手续费是多少 青岛股指期货开户? 南京交强险投保之后如何查询? 南京车辆年检,我手里没有交强险副本怎么办? 一物一码有什么好处? 车是南京的,交强险在上海买行吗 南京只买汽车交强险在什么地方 我从12123平台办理了一个机动车号牌补办业务!也不知道从哪里查询一下进度_百度问一问 南京交强险在哪交 有比特犬咬死藏獒视频吗?这个是真实的吗??? 斗狗厉害还是藏獒厉害 高中生助学金申请怎样写, 喝咖啡真的可以减肥吗? 喝咖啡会减肥吗? 如何解除IP地址权权限? 请问喝咖啡会减肥吗 多喝咖啡会减肥吗 喝咖啡会减肥吗?? 如何解除局域网网管限制 常喝咖啡会瘦吗 电脑网络访问限制怎么解决?看图 数据存储备份与灾难恢复报告怎么写 如何用dos命令备份和还原系统, 我的航天梦作文150子 男宝宝姓孟叫什么名字好 2010年11月1日10:35出生(农历九月二十五)姓孟的男宝宝取什么名字好呢? 系统备份的问题 微商最近卖曾增粗高的靠谱吗 微商最近卖曾增粗高的靠谱吗