oracle数据库中,存储过程中 %rowtype 类型的用法有什么限制吗?

oracle数据库中,存储过程中
t_emp emp%rowtype ;
select t.id, t.name, d.deptno,d.city into t_emp from tab t,dept d
where t.deptno = d.deptno
保证select后面查询的字段和emp表的字段顺序以及结果是一样的,

请问from后面能接n个表查询, 然后通过%rowtype这种形式的变量插入到数据库的emp中吗?

请问from后面能接n个表查询, 然后通过%rowtype这种形式的变量插入到数据库的emp中吗?
答案: 不可以!
原因: 因为t_emp emp%rowtype ;这个语句的意思是 定义一个变量t_emp使其与EMP表具有一样的数据类型. 也就是说EMP表有哪里数据类型的字段,那么这个t_EMP变量也就能够存储什么类型的数据,而且大小范围也是一样的.(如VARCHAR2(20)).
形象点说,t_emp emp%rowtype 就像是一个勺子,装下了EMP表的一行记录.
比如说,你在过程里面定义t_emp emp%rowtype ;后
再加上 SELECT * INTO t_emp FROM EMP WHERE EMPNO=7639;
然后你测试一下,输出这个t_emp.可以这样做.
DBMS_OUTPUT.PUT_LINE(t_emp.EMPNO);
DBMS_OUTPUT.PUT_LINE(t_emp.SAL);
.....
等等,但是局限于EMP里面已有的字段.
如果要实现你的这个SQL :select t.id, t.name, d.deptno,d.city into t_emp from tab t,dept d
where t.deptno = d.deptno
则需要定义多个变量
如: t_name emp.name%type;
t_sa; emp.sal%type; 以此类推, DEPT表也一样.
明白了吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-13
一般这么用:
cursor c_a is select ta.a,ta.b,tb.xx from ta,tb where ta.xxx = tb.xxx;
rt_a c_a%rowtype;

open c_a;
fetch c_a into rt_a;
可以不一个一个的列出来。

然后取值
v_xx = rt_a.xx
或者insert 到另一个表
insert t_c(.....) values(rt_a.xx,......)
第2个回答  2015-06-09
表只能是Oracle的简单类型,不能是自定义的类型或是xml类型
相似回答