查看: 5658|回复: 9

[讨论] 请问,如何在%rowtype动态指定表名【已解决,结贴】

[复制链接]
论坛徽章:
0
发表于 2010-6-11 15:27 | 显示全部楼层 |阅读模式
我创建了一个存储过程p_test ,游标cur是从v_tablename遍历得到的结果集,但是由于v_tablename的表名是根据系统时间每天自动更新,所以使用的是动态的游标。
这里就有一个问题,我用来遍历游标的v_c变量,就没有办法指定类型。我的目的是希望指定v_tablename的类型。
如何才能实现呢?请告诉指点

代码如下:

CREATE OR REPLACE procedure p_test is
  v_sdate varchar2(10);
  v_tablename varchar2(200);
  v_sql_tabledate varchar2(4000);  
  TYPE cur IS REF CURSOR;
  c cur;  
  v_c  %rowtype;
begin
    select to_char(sysdate,'mmdd') into v_Sdate from dual;
    v_tablename := 'T_'||v_sdate||'SUBMITFAILEDHISTORY';   

    v_sql_tabledate := 'select id,vname from '|| v_tablename ||' where id = 1';
    OPEN c FOR v_sql_tabledate;
        loop
                fetch c into v_c;   
                Exit when c%not found;         
                dbms_output.put_line(v_c.id);        
                dbms_output.put_line(v_c.vname);        
        end loop;
        close c;
end p_test;
/

[ 本帖最后由 flora_zhang1225 于 2010-6-12 09:27 编辑 ]
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
发表于 2010-6-11 15:31 | 显示全部楼层
这种写法是不可能的!用其他方式吧

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2010-6-11 15:37 | 显示全部楼层
请教,其他什么方式可以实现?

使用道具 举报

回复
论坛徽章:
32
祖国60周年纪念徽章
日期:2009-10-09 08:28:002013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-06-28 11:09:23ITPUB季度 技术新星
日期:2013-07-30 16:04:58优秀写手
日期:2013-12-18 09:29:132014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09红孩儿
日期:2014-03-04 16:40:38美羊羊
日期:2015-02-16 16:36:28懒羊羊
日期:2015-03-04 14:52:11
发表于 2010-6-11 21:58 | 显示全部楼层
把过程写成动态创建的,每次表生成的时候动态创建一下这个过程。

使用道具 举报

回复
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
发表于 2010-6-11 22:16 | 显示全部楼层
动态创建过程啊,晕,这种需求本身很不合理

使用道具 举报

回复
论坛徽章:
533
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2010-6-11 23:07 | 显示全部楼层
不要钻牛角尖,这样就可以了:

  TYPE tr IS RECORD (
       id NUMBER,vname VARCHAR2(20)
       );
  v_c  tr;

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2010-6-12 09:19 | 显示全部楼层
的确,楼上的方法可行,是最简便的。
问题已解决,结贴。

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2010-6-12 10:18 | 显示全部楼层

回复 #6 newkid 的帖子

这里能用是因为就取2固定名称列

使用道具 举报

回复
论坛徽章:
74
蓝锆石
日期:2011-12-29 15:35:34萤石
日期:2011-11-18 15:00:15祖母绿
日期:2011-12-29 15:26:07海蓝宝石
日期:2011-12-30 16:00:25紫水晶
日期:2011-12-29 15:26:07红宝石
日期:2011-12-29 15:26:07季节之章:冬
日期:2012-01-01 12:35:07季节之章:冬
日期:2012-01-01 12:35:07季节之章:夏
日期:2011-09-28 16:06:59季节之章:夏
日期:2011-09-28 16:06:59
发表于 2010-6-12 15:09 | 显示全部楼层
呃 那不是定义两个类型固定的变量进行fetch into也可以吗

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2010-6-13 01:51 | 显示全部楼层
原帖由 onano 于 2010-6-12 15:09 发表
呃 那不是定义两个类型固定的变量进行fetch into也可以吗


是的,可以的。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表