求oracle高手,存储过程中取游标值时,出现数据类型不一致问题,急急

我自定义了一个自定义数据类型emp_reccreateorreplacetypeemp_recasobject(item1number,item2number)定义了一个... 我自定义了一个自定义数据类型emp_rec
create or replace type emp_rec as object
(
item1 number ,
item2 number
)
定义了一个存储过程
create or replace procedure test is
v_sql varchar2(100);
TYPE EmpCurTyp IS REF CURSOR;
emp_cv EmpCurTyp;
emp emp_rec;
begin

v_sql:='select sum(tt) item1,sum(bb) item2 from table1';
open emp_cv for v_sql;
loop

fetch emp_cv into emp;
EXIT WHEN emp_cv%NOTFOUND;
begin
dbms_output.put_line(emp.item1);
end;
end test;

运行报数据类型不一致,应为-,但却获得-
展开
 我来答
妖灬影nice
2013-11-05
知道答主
回答量:1
采纳率:0%
帮助的人:2.4万
展开全部
游标返回类型应该定义为 emp table1%rowtype;
然后再fetch emp_cv into emp;

对象类型在这里不能直接赋值,你也可以使用一个复合类型去定义变量比如:
create or replace type emp_rec is record
(
item1 number,
item2 number
);
emp emp_rec;
然后 再fetch emp_cv into emp; 这里变量顺序必须与游标字段顺序一致;
追问
怎么定义复合类型 ,直接is recode 报错了。
追答
是  is record
micro0369
2013-11-05 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:3941万
展开全部

个人觉得

 

  1. 自定义类型就不能这么用吧,你说,下面的sql能对吗?

 

select sum(tt) item1,sum(bb) item2 into emp

from (select 1 tt,2 bb from dual) table1;

 

2.      你的 end loop 呢?

追问
有的 忘记写上去了,我的业务逻辑比较复杂,所以写了一个简单版的表达一下这个意思 ,该怎么解决这个问题呢?我想通过open 弱游标来获取sql的值,然后在通过Loop 来获取游标内部的值,怎么获取呢
追答
你直接定义2个变量去取值呢?

declare 里面:
item1 number;
item2 number;

loop 里面:

fetch emp_cv into item1,item2;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangxiaodi7428
2013-11-05 · TA获得超过313个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:93.9万
展开全部
你表里数据是number 存储过程里边用的是varchar 统一一下数据的类型
追问
sum 返回的是varchar?
追答
你sum返回的可能是数吧
但是你前边不是定义了 v_sql是varchar吗 把数字型赋值给字符型了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式