游标oracle存储过程
A. oracle存储过程游标使用疑问
1、for t_name in (select ...) loop
这个是隐式游标,相当于一个结果集,隐式Cursor由系统自动打开和关闭。
exit when %notfound是配合fetch使用,没有fetch就不需要。
你第一个存储过程可以这样写:
create or replace procere d_1 is
begin
for cur in (select * from t_t) ---这个cur是隐式游标,无需定义,直接使用。
loop
dbms_output.put_line(cur.name);
end loop;
end;
/
2、使用的是标准的显式游标
a 定义游标---Cursor [Cursor Name] IS;
b 打开游标---Open [Cursor Name];
c 操作数据---Fetch [Cursor name]
d 关闭游标---Close [Cursor Name]
希望能帮到你。
B. oracle存储过程中打开游标有几种方法用open直接打开
两种方法
1.声明游标时写好SELECT语句,如
CURSOR r_cur1 IS select *** from tableName where 条件;
使用时
OPEN r_cur1;
LOOP
FETCH *** INTO variable;
EXIT WHEN r_cur1%NOTFOUND OR r_cur1%NOTFOUND IS NULL;
。。。
2.声明游标
ccc sys_refcursor;
使用时
open ccc for select dept_code,dept_name from comm.dept_dict;
loop
fetch ccc into aa,bb;
exit when ccc%notfound;
。。。
end loop;
close ccc;
C. oracle怎样用游标调用存储过程
这个需要用程序包package来做。在包头里定义入参为游标
sql">createorreplace
PACKAGEpro_test
AS
TYPECURSOR_PAGEISREFCURSOR;
PROCEDUREinsert_one_teacher(
p_1INCURSOR_PAGE);
END;
后面包体就不列了。
D. oracle存储过程游标有什么用
1,什么是游标?
①从表中检索出结果集,从中每次指向一条记录进行交互的机制。
②关系数据库中的操作是在完整的行集合上执行的。
由SELECT 语句返回的行集合包括满足该语句的WHERE 子句所列条件的所有行。由该语句返回完整的行集合叫做结果集。
应用程序,尤其是互动和在线应用程序,把完整的结果集作为一个单元处理并不总是有效的。
这些应用程序需要一种机制来一次处理一行或连续的几行。而游标是对提供这一机制的结果集的扩展。
游标是通过游标库来实现的。游标库是常常作为数据库系统或数据访问API 的一部分而得以实现的软件,
用来管理从数据源返回的数据的属性(结果集)。这些属性包括并发管理、在结果集中的位置、返回的行数,
以及是否能够在结果集中向前和/或向后移动(可滚动性)。
游标跟踪结果集中的位置,并允许对结果集逐行执行多个操作,在这个过程中可能返回至原始表,也可能不返回至原始表。
换句话说,游标从概念上讲基于数据库的表返回结果集。
由于它指示结果集中的当前位置 ,就像计算机屏幕上的光标指示当前位置一样,“游标”由此得名。
E. 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;
F. oracle在存储过程中定义游标
createtableemp
(idvarchar2(10),
namevarchar2(20),
sexnumber,
tyvarchar2(20)
);
insertintoempvalues('001','Tom',1,'gcs');
insertintoempvalues('002','John',1,'dba');
insertintoempvalues('003','Jean',0,'gcs');
insertintoempvalues('004','Reid',1,'gcs');
commit;
createorreplaceprocerepro6as
cursorcris
select*
fromemp
wheresex=1
andty='gcs';
begin
forcr_resultincrloop
begin
dbms_output.put_line('ID:'||cr_result.id||'NAME:'||
cr_result.name);
end;
endloop;
endpro6;
G. Oracle调用存储过程输出的游标问题
不知道你那里。
是不是可以把那个 存储过程 (参数是游标)的。
修改为 函数, 返回游标。
如果可以修改的话, 那么你参考一下 下面这个例子代码
--测试表数据。
select*fromtest_main;
IDVALUE
------------------------------
1ONE
3THREE
2TWO
--返回结果集的函数.
CREATEORREPLACEFUNCTIONGet_Test_Main_All
RETURNSYS_REFCURSOR
IS
return_cursorSYS_REFCURSOR;
BEGIN
OPENreturn_cursorFOR'SELECT*FROMtest_main';
RETURNreturn_cursor;
END;
/
--普通的查询,来查看结果.
SELECTGet_Test_Main_All()FROMal;
GET_TEST_MAIN_ALL()
--------------------
CURSORSTATEMENT:1
CURSORSTATEMENT:1
IDVALUE
------------------------------
1ONE
3THREE
2TWO
--存储过程调用,来获取结果.
DECLARE
--调用函数的返回值.
testCursorSYS_REFCURSOR;
--存储单行数据.
testRectest_main%ROWTYPE;
BEGIN
--调用返回结果集的函数.
testCursor:=Get_Test_Main_All();
--循环,遍历结果.
LOOP
--游标向前.
FETCHtestCursorINTOtestRec;
--无数据的情况下,退出循环.
EXITWHENtestCursor%NOTFOUND;
--输出调试信息.
dbms_output.put_line(TO_CHAR(testRec.id)||''||testRec.value);
ENDLOOP;
END;
/
1ONE
3THREE
2TWO
PL/SQL过程已成功完成。
H. Oracle存储过程游标for循环怎么写
一、不带参数的游标for循环
1
首先编写存储过程的整体结构,如下:
create or replace procere test_proc is
v_date date; --变量定义
begin
select sysdate into v_date from al;
end test_proc;
2
定义游标:
create or replace procere test_proc is
v_date date; --定义变量
cursor cur is select * from ldcode; --定义游标
begin
select sysdate into v_date from al;
end test_proc;
3
编写for循环:
create or replace procere test_proc is
v_date date; --定义变量
cursor cur is select * from ldcode where rownum<10; --定义游标
begin
select sysdate into v_date from al;
--游标for循环开始
for temp in cur loop --temp为临时变量名,自己任意起
Dbms_Output.put_line(temp.Code); --输出某个字段,使用"变量名.列名"即可。
end loop;
--游标for循环结束
end test_proc;
4
测试运行,点击【DBMS Output】标签页查看结果如下图:
END
二、带参数的游标for循环
1
定义带参数的游标:
cursor cur(v_codetype ldcode.Codetype%TYPE) is
select * from ldcode where codetype = v_codetype; --定义游标
定义游标格式:
cursor 游标名称(变量定义) is 查询语句;
注意:
where条件中的变量名v_codetype要与游标定义cur(v_codetype ldcode.Codetype%TYPE)中的一致。
2
编写for循环部分:
--游标for循环开始
for temp in cur('llmedfeetype') loop
--temp为临时变量名,自己任意起
--cur('llmedfeetype')为"游标名称(传入的变量)"
Dbms_Output.put_line(temp.Code); --输出某个字段,使用"变量名.列名"即可。
end loop;
--游标for循环结束
3
测试运行,点击【DBMS Output
I. oracle 关于存储过程和游标的问题
首先你要返回到应用后台做文件删除肯定是结果集映射到List,
然后再单独进行Delete操作、或者你先删除,待返回成功标志再删除文件。
如果选择存储过程的话,你就要定义Oracle的Package、声明游标变量、用作存储过程的返回out参数。