看同事在存储过程中的查询中游标都是像变量一样定义。请问如何自定义一个这样的游标,写法是什么?例如:
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;谢谢~
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;谢谢~
解决方案 »
- 关于动态sql的问题
- 如何安装Oracle 10g 的proc?
- 求助,关于默认数据的问题
- 高手请帮忙,解释下面 oracle 写日志文件信息。
- oracle的sql developer启动不了有警告
- system用户 在函数里如何使用dba_tables对象
- 超初级问题:用windows系统下的oracle9i怎么新建一个数据库
- 如何修改ORACLE8i(OS IS WIN2000)internal用户的密码
- 关于两个表联合查询的问题。
- 在开发工具中调用ORACLE存储过程返回记录集的问题,谁能给出完整的例子,有一个给100分
- 关于oracle的收费还是没有理解
- 安装oracle10g时报ORA-12560错误
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;
/
--更新订单状态(失效),更新号码表里的号码状态
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;
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;格式不在于多,够用就行,呵呵
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;
请问一下 SYS_REFCURSOR 这个是自定义的还是ORACLE自己有的。
如果是自定义,是如何定义?
谢谢~
ORACLE系统游标类型,OUT参数都这么整