[菜鸟]救教游标的自定义方法

cdliujun 2011-08-10 03:46:49
看同事在存储过程中的查询中游标都是像变量一样定义。

请问如何自定义一个这样的游标,写法是什么?

例如:
Create Or Replace Proc p_xxxxxx
(
p_x in number,
p_x in varchar2,
p_cursor out sysXXX
)
Open p_cursor For
Select * Form * Where * = * ;
End p_xxxxxx;

谢谢~
...全文
95 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cutebear2008 2011-08-16
  • 打赏
  • 举报
回复
SYS_*一般是系统自带的!
[Quote=引用 6 楼 cdliujun 的回复:]
引用 1 楼 luoyoumou 的回复:

SQL code
-- 给个例子给你:

-- 实例:Oracle存储过程返回数据集

CREATE table userinfo(id number(18,0), name varchar2(30), sex varchar2(10), age number(3,0), address varchar2(100));

insert……
[/Quote]
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cdliujun 的回复:]
引用 1 楼 luoyoumou 的回复:

SQL code
-- 给个例子给你:

-- 实例:Oracle存储过程返回数据集

CREATE table userinfo(id number(18,0), name varchar2(30), sex varchar2(10), age number(3,0), address varchar2(100));

insert……
[/Quote]

ORACLE系统游标类型,OUT参数都这么整
cdliujun 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luoyoumou 的回复:]

SQL code
-- 给个例子给你:

-- 实例:Oracle存储过程返回数据集

CREATE table userinfo(id number(18,0), name varchar2(30), sex varchar2(10), age number(3,0), address varchar2(100));

insert into userinfo(id,name,sex,age……
[/Quote]

请问一下 SYS_REFCURSOR 这个是自定义的还是ORACLE自己有的。
如果是自定义,是如何定义?
谢谢~
cdliujun 2011-08-15
  • 打赏
  • 举报
回复
顶一下。

请达人帮忙一下。

谢谢~
soochief 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 soochief 的回复:]

SQL code

create or replace Procedure p_xxxxxx
(
p_x in number,
p_x in varchar2,
p_cursor sys_refcursor;
)
Open p_cursor For
'Select * Form * Where * = * ';
End;



或者

SQL code

create ……
[/Quote]

额,看错了,无视吧。

1L正解
soochief 2011-08-10
  • 打赏
  • 举报
回复

create or replace Procedure p_xxxxxx
(
p_x in number,
p_x in varchar2,
p_cursor sys_refcursor;
)
Open p_cursor For
'Select * Form * Where * = * ';
End;


或者


create or replace Procedure p_xxxxxx
(
type c is ref cursor
p_x in number,
p_x in varchar2,
p_cursor c;
)
Open p_cursor For
'Select * Form * Where * = * ';
End;
ITWIT 2011-08-10
  • 打赏
  • 举报
回复
我常使用的有下列两种:
1、游标不挂参数
declare
cursor 游标名 is select 字段1,字段2 from 表 [where 条件];
begin
for var_exp in 游标名 loop
dbms_output.put_line(游标名.字段1 ||':'||游标名.字段2 );
end loop;
end;

2、游标挂参数
declare
cursor 游标名(参数1 类型,参数2 类型) is select 字段1,字段2 from 表 where 条件1 = 参数1 and 条件2 = 参数2;
begin
for var_exp in 游标名(传入参数1,穿入参数2) loop
dbms_output.put_line(游标名.字段1 ||':'||游标名.字段2 );
end loop;
end;

格式不在于多,够用就行,呵呵
szc108 2011-08-10
  • 打赏
  • 举报
回复
create or replace procedure sp_UpdateOrder as
--更新订单状态(失效),更新号码表里的号码状态
order_id VARCHAR2(500); --订单id
v_time integer(10);
cursor cur_order is
select *
from scm_order t
where t.ordertype=1 and t.order_status=2 and t.checkstatus=1
and (t.checktm + numtodsinterval(v_time, 'minute')) < sysdate;

cursor cur_number is
select * from v_orderitemdetail b where b.order_id = order_id;
begin
select t.theinterval into v_time from scm_updatetime t where t.thetype='4' and rownum<2;--1是选号的,2是购物车的,3是批号的,4是订单失效的
for rec in cur_order loop
update scm_order t0
set t0.order_status=17
where t0.order_id = rec.order_id;

--改变号码表里的号码状态
order_id := rec.order_id;
for numitem in cur_number loop
update scm_goods_simnumber a
set a.simgoout = 0
where a.numbername = numitem.mobilenum
and a.simgoout = 1;
end loop;
end loop;
end sp_UpdateOrder;
luoyoumou 2011-08-10
  • 打赏
  • 举报
回复
-- 给个例子给你:

-- 实例:Oracle存储过程返回数据集

CREATE table userinfo(id number(18,0), name varchar2(30), sex varchar2(10), age number(3,0), address varchar2(100));

insert into userinfo(id,name,sex,age,address) values(1,'luoyoumou','男',33,'湖南省衡阳市');
insert into userinfo(id,name,sex,age,address) values(2,'miaoxiaoming','男',32,'江西省吉安市');
insert into userinfo(id,name,sex,age,address) values(3,'hanqiguang','男',28,'江西省赣州市');

commit;

create table userinfo2 as select * from userinfo where 1=2;

-- i_address 是存储过程的输入参数,o_cur是存储过程的输出游标参数,用以获取返回的结果集!
CREATE OR REPLACE PROCEDURE userinfo_proc(i_address VARCHAR2, o_cur OUT SYS_REFCURSOR)
IS
sqlstr VARCHAR2(200); -- 定义变量,用以存放SQL语句
BEGIN
sqlstr := 'SELECT Id, Name, Sex, Age, Address FROM userinfo WHERE Address = :i_address'; -- 给SQL变量赋值,其中 :i_address 是绑定变量,以提高执行效率!
OPEN o_cur FOR sqlstr USING i_address; -- 给游标变量赋值
END;
/

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧