我自定义了一个自定义数据类型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;
运行报数据类型不一致,应为-,但却获得-
怎么定义复合类型 ,直接is recode 报错了。
追答是 is record
个人觉得
自定义类型就不能这么用吧,你说,下面的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;
sum 返回的是varchar?
追答你sum返回的可能是数吧
但是你前边不是定义了 v_sql是varchar吗 把数字型赋值给字符型了