请各位给个例子 ,谢了。。
解决方案 »
- orcale pl/sql把一个字段的数值补齐9位数
- 各路英雄,能否讨论下Oracle的JDBC实现上的问题,在select时貌似一次全将记录集load到内存了
- 怎样把一个数组参数赋给存储过程?
- oracle新创建一个用户的方法?
- 为何大公司会用oracle的?
- 有关高级复制和Standby问题
- 求救!!我刚装了oracle9i,怎么登陆??
- 怎樣在ORACLE8.16 EXPORT數據庫?
- 求sql,急用!解决后另给1000,
- Oracle 9i for linux是不是免费的,还是需要付费使用?
- 在oracle 中参数的使用?
- oracle 触发器 如何 动态获取 :OLD.列名 列名动态
--你是想返回游标吧
create or replace procedure sp_test(o_data out sys_refcursor)
as
begin
open o_data for select * from table;
end;
type CURSOR1 is REF CURSOR;
然后存储过程中定义一个 pd_1(pd_cursor out CURSOR1 )就可以返回一个结果集了。
is
begin
open P_CURSOR for select * from table1;
end;
create view aa view as select * from tb_test
tb_test(ID CHAR(2),NAME VARCHAR2(10))
--创建存储过程
create or replace procedure sp_return_view
(ret_cursor out sys_refcursor) is
sqlstr varchar2(100);
n_count number;
begin
select count(*) into n_count from aa;
if n_count=0 then
insert into aa values('30','xiaowang');
else
sqlstr:='selece * from aa';
execute immediate sqlstr;
open ret_cursor for sqlstr;
end if;
exception
when others then
dbms_output.put_line('发生其他错误,请核对代码是否正确!!');
end sp_return_view;调用过程declare
ret_cursor_value sys_refcursor;
view_info tb_test%rowtype;
begin
sp_return_view(ret_cursor_value);
loop
fetch ret_cursor_value into view_info ;
dbms_output.put_line(view_info.id||','||view_info.name);
exit when %notfound ;
end loop;ret_cursor_value
end;
-- 如果要返回视图里面的数据,就跟返回表里面的数据是一回事撒!-- 请看例子:
-- 实例: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;
/-- userinfo 是一个表的名字,如果要查询视图的结果,就将表的名字替换成你的视图的名字,
-- 然后其SQL语句就根据你的需要去改写就OK啦!