当前位置:首页 » 服务存储 » oracle存储和游标结合
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

oracle存储和游标结合

发布时间: 2022-05-13 01:46:22

㈠ oracle存储过程游标问题

--打开游标并提取后面sql的第一行数据放到游标中 这里就是打开游标
open for 是隐式游标的写法 不建议使用 这种游标好象不需要关闭 具体你自己测试下 而且少了expection 处理

fetch mycur into yang_02;
--循环插入数据
多余了 可以不要 前面有fetch了如果还有这里的话 就只能插入奇数行
其他没什么问题了 还有你这个过程用ref cursor是浪费 没必要用 用简单的显示游标更好点

㈡ oracle存储过程游标有什么用

1,什么是游标?
①从表中检索出结果集,从中每次指向一条记录进行交互的机制。

②关系数据库中的操作是在完整的行集合上执行的。
由SELECT 语句返回的行集合包括满足该语句的WHERE 子句所列条件的所有行。由该语句返回完整的行集合叫做结果集。
应用程序,尤其是互动和在线应用程序,把完整的结果集作为一个单元处理并不总是有效的。
这些应用程序需要一种机制来一次处理一行或连续的几行。而游标是对提供这一机制的结果集的扩展。

游标是通过游标库来实现的。游标库是常常作为数据库系统或数据访问API 的一部分而得以实现的软件,
用来管理从数据源返回的数据的属性(结果集)。这些属性包括并发管理、在结果集中的位置、返回的行数,
以及是否能够在结果集中向前和/或向后移动(可滚动性)。

游标跟踪结果集中的位置,并允许对结果集逐行执行多个操作,在这个过程中可能返回至原始表,也可能不返回至原始表。
换句话说,游标从概念上讲基于数据库的表返回结果集。
由于它指示结果集中的当前位置 ,就像计算机屏幕上的光标指示当前位置一样,“游标”由此得名。

㈢ oracle 存储过程中 应用游标, 问题出在哪里了呢

-- 装载数据
fetch cur_1 into empno, ename,job,mgr,hiredate,sal,comm,deptno;
1、里面into之后的那些变量你没有定义,你得定义变量,然后将游标中的东西fetch给这些变量。2、个人认为你开始判断游标是否已打开完全没有必要,如果异常,你在exception里close就行了。
3、你OPEN之后没有游标exit的条件

㈣ oracle在存储过程中定义游标

createorreplace
procerepro6
as
vempnoemp.empno%type;
venameemp.ename%type;
cursorc_empisselectempno,enamefromemp;
begin
openc_emp;
loop
fetchc_empintovempno,vename;
exitwhenc_emp%notfound;
dbms_output.put_line('编号:'||vempno||'姓名:'||vename);
endloop;
closec_emp;
end;

㈤ Oracle存储过程和游标操作

--第一个题目,我的表叫stu,你别忘了改成你的表名
createorreplaceprocerepro7
as
cursorc_emp1isselectename,salfromstu;
venamestu.ename%type;
vsalstu.sal%type;
vnewsalstu.sal%type;
vfdnumber:=0;
begin
openc_emp1;
loop
fetchc_emp1intovename,vsal;
exitwhenc_emp1%notfound;
vfd:=vsal*0.2;
ifvfd<=300
thenupdatestusetsal=sal+vfdwhereename=vename;
vnewsal:=vsal+vfd;
dbms_output.put_line('员工'||vename||'涨了'||vnewsal||'工资');
endif;
endloop;
closec_emp1;
end;

㈥ oracle 关于存储过程和游标的问题

首先你要返回到应用后台做文件删除肯定是结果集映射到List,
然后再单独进行Delete操作、或者你先删除,待返回成功标志再删除文件。
如果选择存储过程的话,你就要定义Oracle的Package、声明游标变量、用作存储过程的返回out参数。

㈦ oracle中存储过程与游标的结合使用问题

(v_cnameinvarchar)as
s_tmpnumber;
s_totalnumber;
cursorcur_gradeisselect*fromscwherec#in(selectc#fromcwherecname=v_cname);
begin
forcur_recincur_gradeloop
s_tmp:=cur_rec.grade;
s_total:=nvl(s_total,0)+nvl(s_tmp,0);
endloop;
dbms_output.put_line(v_cname||'的总分是:'||s_total);
end;

㈧ oracle存储过程中使用游标作为out类型参数,求救!

1、你定义的【RET_CURSOR_VALUE】是一个光标变量,当他作为参数传入过程【GET_EMPINFOBYDEPNO】时候已经被打开(就是open...for),在主程序中再度打开是没有必要的也是错误的(且光标变量只能用【open...for】的形式打开)。
2、所以把【OPEN
RET_CURSOR_VALUE】这句话删掉,就没有问题了。
*******************************
口说无凭,oracle实施log请参照:
说明:我把empno改成20了(因为表里面没有1的数据),还有把open语句注掉了。
*******************************
[SCOTT@ORA1]
SQL>DECLARE
2
RET_CURSOR_VALUE
PKG_CONST.REF_CURSOR;
3
RET_EMPNO
EMP.EMPNO%TYPE;
4
RET_ENAME
EMP.ENAME%TYPE;
5
BEGIN
6
GET_EMPINFOBYDEPNO(20,
RET_CURSOR_VALUE);
7
--OPEN
RET_CURSOR_VALUE
;--报游标类型有误,未解决!!!
8
LOOP
9
FETCH
RET_CURSOR_VALUE
10
INTO
RET_EMPNO,
RET_ENAME;
11
EXIT
WHEN
RET_CURSOR_VALUE%NOTFOUND;
12
DBMS_OUTPUT.PUT_LINE('empNo
is:'
||
RET_EMPNO
||
',empName
is'
||
13
RET_ENAME);
14
END
LOOP;
15
CLOSE
RET_CURSOR_VALUE;
16
END;
17
/
empNo
is:7369,empName
isSMITH
empNo
is:7566,empName
isJONES
empNo
is:7902,empName
isFORD
---
以上,希望对你有所帮助。