在 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; --这样也报错 展开
 我来答
renfengjun1986
推荐于2017-09-18 · 知道合伙人软件行家
renfengjun1986
知道合伙人软件行家
采纳数: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这个变量倒是可以通用的。不然的话还真是没什么好的解决办法了。
pieryon
推荐于2017-09-14 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14411 获赞数:166866
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部
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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式