在 oracle 的存储过程中 如何声明一个动态表的记录型变量
r_rowmryeb%rowtype;这样声明记录型变量是没有问题的。我遇到的问题是mryeb这个表是有前缀(动态)的比如a001mryeb,a002mryeb如果声明的...
r_row mryeb%rowtype; 这样声明记录型变量是没有问题的。我遇到的问题是 mryeb这个表是有前缀(动态)的 比如 a001mryeb, a002mryeb 如果声明的时候 setprefix varchar(20) :='a001' ; r_row setprefix||'mryeb'%rowtype; --这样报错 r_row setprefix||mryeb%rowtype; --这样也报错
展开
2个回答
推荐于2017-09-18 · 知道合伙人软件行家
renfengjun1986
知道合伙人软件行家
向TA提问 私信TA
知道合伙人软件行家
采纳数:925
获赞数:1553
中国地质调查局特聘数据库专家 CSDN博客专家 百度知道数据库行家 炼数成金版主 想了解更多请关注我的博客:
向TA提问 私信TA
关注
展开全部
你只能在存储过程中使用动态的匿名块了。
比如:
create or replace procedure pro1(p_tname varchar2) is
v_dy_sql_block varchar2(32767) ;
begin
v_dy_sql_block := ' declare '||
' l_row '||p_tname||'%rowtype ;' ||
'....' ;
execute immediate v_dy_sql_block ;
end;
更多追问追答
追问
也就是说要把我之前的那个存储过程全部写到动态匿名块里吗? 我之前的那个存储过程很长,SQL语句要查询的字段有好几十个,所有想声明一个rowtype类型的变量取数好一点,否则就得声明好几十个字段类型的变量写起来很麻烦。 不过很长的一个存储过程写到块里也很费劲。
追答
如果你这个动态的表的字段顺序和类型相同,rowtype这个变量倒是可以通用的。不然的话还真是没什么好的解决办法了。
推荐于2017-09-14 · 知道合伙人数码行家
关注
展开全部
1、可以这么声明:
TYPE t_StudentRecord IS RECORD(
StudentID NUMBER(5),
FirstName VARCHAR2(20),
LastName VARCHAR2(20);
/*定义t_StudentRecord 类型变量.*/
v_StudentInfo t_StudentRecord;
2、记录赋值
可以用SELECT语句向记录赋值,这将会从数据库中检索数据并将该数据存储到记录中。注意的是,记录中字段应该和查询结果列表中的字段相匹配。
SELECT studentID,firstName,lastName
into v_StudentInfo
from students where studentID=32;
TYPE t_StudentRecord IS RECORD(
StudentID NUMBER(5),
FirstName VARCHAR2(20),
LastName VARCHAR2(20);
/*定义t_StudentRecord 类型变量.*/
v_StudentInfo t_StudentRecord;
2、记录赋值
可以用SELECT语句向记录赋值,这将会从数据库中检索数据并将该数据存储到记录中。注意的是,记录中字段应该和查询结果列表中的字段相匹配。
SELECT studentID,firstName,lastName
into v_StudentInfo
from students where studentID=32;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询