怎么给游标赋值?存储过程返回列表

lvzi98 2010-10-22 10:06:07

create or replace p_temp_procedure
(
cur_arg out sys_refcursor; --方法1
)
as

v_sum float; --要传出的值



begin

--这个v_sum 是通过循环计算得到的,
-- 有两重循环,第一重循环每个都产生一个 v_sum;
--

怎么把这个 v_sum 保存出来

end



存储过程返回列表?

保存到游标里面,只能保存最后一次的值,前面的值都被覆盖了。
...全文
590 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
心中的彩虹 2010-10-31
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wkc168 的回复:]
引用 8 楼 wangjinwei6912 的回复:
参考一下数组的用法。http://blog.csdn.net/inthirties/archive/2009/08/03/4400905.aspx

如这个理面讲的

Java code
1 declare
2 type v_rec_type is table of emp.empname%type;
3 v_rec v_rec……
[/Quote]



SQL> CREATE OR REPLACE TYPE Person AS OBJECT
2 (
3 p_code VARCHAR2(32),
4 p_name VARCHAR2(16),
5 p_age NUMBER,
6 p_birthday DATE
7 );
8 /

类型已创建。

SQL> CREATE OR REPLACE TYPE person_table_type IS TABLE OF Person;
2 /

类型已创建。

SQL> create table person_tab of Person --建立对象表
2 /

表已创建。


SQL> CREATE OR REPLACE PROCEDURE testtableofobject(v_table OUT person_table_type) IS
2 BEGIN
3 v_table := person_table_type();
4 FOR i IN 1 .. 5 LOOP
5 v_table.EXTEND;
6 v_table(i) := NEW person('45212319880810435' || i,
7 '侯廷文' || i,
8 20 + i,
9 to_date('1985-08-1' || i, 'YYYY-MM-DD'));
10 END LOOP;
11 END testtableofobject;
12 /

过程已创建。

--调用
SQL> declare
2 person_tb person_table_type;
3 begin
4 testtableofobject(person_tb);
5 forall i in 1..person_tb.count
6 insert into person_tab values person_tb(i);
7 end;
8 /

PL/SQL 过程已成功完成。

SQL> commit;

提交完成。

SQL> select * from person_tab;

P_CODE P_NAME P_AGE P_BIRTHDAY
-------------------------------- ---------------- ---------- --------------
452123198808104351 侯廷文1 21 11-8月 -85
452123198808104352 侯廷文2 22 12-8月 -85
452123198808104353 侯廷文3 23 13-8月 -85
452123198808104354 侯廷文4 24 14-8月 -85
452123198808104355 侯廷文5 25 15-8月 -85












心中的彩虹 2010-10-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wangjinwei6912 的回复:]
参考一下数组的用法。http://blog.csdn.net/inthirties/archive/2009/08/03/4400905.aspx

如这个理面讲的

Java code
1 declare
2 type v_rec_type is table of emp.empname%type;
3 v_rec v_rec_type;
4 rec sys……
[/Quote]
java 没学过
java应该也有数组的
lvzi98 2010-10-31
  • 打赏
  • 举报
回复
参考一下数组的用法。http://blog.csdn.net/inthirties/archive/2009/08/03/4400905.aspx

如这个理面讲的
1  declare
2 type v_rec_type is table of emp.empname%type;
3 v_rec v_rec_type;
4 rec sys_refcursor;
5 begin
6 p_record(rec);
7 fetch rec bulk collect into v_rec;
8 for i in 1..v_rec.count loop
9 dbms_output.put_line(v_rec(i));
10 end loop;
11 close rec;
12* end;
java 调用存储过程怎么返回 v_rec 这个 table 类型的变量啊
inthirties 2010-10-27
  • 打赏
  • 举报
回复
心中的彩虹 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangjinwei6912 的回复:]
Java code

create or replace p_temp_procedure
(
cur_arg out sys_refcursor; --方法1
)
as

v_sum float; --要传出的值



begin

--这个v_sum 是通过循环计算得到的,
-- 有两重循环,第一重循环每个都产生一个 v_sum;
……
[/Quote]
看我回的帖子 调用赋给嵌套表

http://topic.csdn.net/u/20101026/15/79c58367-7376-4a62-8abe-ed35b9090d11.html?9788
lvzi98 2010-10-25
  • 打赏
  • 举报
回复
# CREATE TYPE t_arr AS OBJECT(
# id NUMBER ,
# name varchar2(20)
# );
#
# CREATE type t_arr_re as table of t_arr;

这样写不对吗
gelyon 2010-10-25
  • 打赏
  • 举报
回复
楼主你这个是什么意思?创建的到底是procedure 还是。。。
create or replace p_temp_procedure


如果要保存每次循环产生的v_sum,最好用临时表来存储每次循环的值。
lvzi98 2010-10-25
  • 打赏
  • 举报
回复
现在,可以返回数组,但是java调用时候报错
  • 打赏
  • 举报
回复
每一个循环里产生的v_sum都要保存吗?
如果这样的话 可以建个表,在循环里把v_sum插入到表里

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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