oracle数据库中,存储过程中 %rowtype 类型的用法有什么限制吗?
发布网友
发布时间:2022-04-07 18:58
我来回答
共3个回答
热心网友
时间:2022-04-07 20:27
请问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表也一样.
明白了吧
热心网友
时间:2022-04-07 21:45
一般这么用:
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,......)
热心网友
时间:2022-04-07 23:20
表只能是Oracle的简单类型,不能是自定义的类型或是xml类型