查看: 24099|回复: 8

[SQL] 如何把long类型的数据最终转换成varchar2类型呢?

[复制链接]
论坛徽章:
0
跳转到指定楼层
1#
发表于 2012-2-2 18:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SELECT  high_value   FROM dba_tab_partitions
             WHERE table_name = 'S_xx_INFO'
                   AND table_owner = 'SDW'
          ORDER BY partition_position DESC;
high_value字段为LONG类型,现需要把该字段的内容转为VARCHAR2。
我这样试了,不行。貌似to_lob()函数并没有把long真正转为clob。请高手看看有没有别的方法?在线急等!
SELECT  DBMS_LOB.SUBSTR(to_lob(high_value),100,1) cc
              FROM dba_tab_partitions
             WHERE table_name = 'S_AI_PR_LOAN_ACCO_AMT_INFO'
                   AND table_owner = 'SDW'
          ORDER BY partition_position DESC;

论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
2#
发表于 2012-2-2 19:03 | 只看该作者

回帖奖励 +2

SQL> create or replace function display_raw (rawval raw, type varchar2)
  2  return varchar2
  3  is
  4     cn     number;
  5     cv     varchar2(32);
  6     cd     date;
  7     cnv    nvarchar2(32);
  8     cr     rowid;
  9     cc     char(32);
10  begin
11     if (type = 'NUMBER') then
12        dbms_stats.convert_raw_value(rawval, cn);
13        return to_char(cn);
14     elsif (type = 'VARCHAR2') then
15        dbms_stats.convert_raw_value(rawval, cv);
16        return to_char(cv);
17     elsif (type = 'DATE') then
18        dbms_stats.convert_raw_value(rawval, cd);
19        return to_char(cd);
20     elsif (type = 'NVARCHAR2') then
21        dbms_stats.convert_raw_value(rawval, cnv);
22        return to_char(cnv);
23     elsif (type = 'ROWID') then
24        dbms_stats.convert_raw_value(rawval, cr);
25        return to_char(cnv);
26     elsif (type = 'CHAR') then
27        dbms_stats.convert_raw_value(rawval, cc);
28        return to_char(cc);
29     else
30        return 'UNKNOWN DATATYPE';
31     end if;
32  end;
33  /

用这个函数try一哈

使用道具 举报

回复
论坛徽章:
22
ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152014年世界杯参赛球队: 比利时
日期:2014-06-15 20:40:142014年世界杯参赛球队: 科特迪瓦
日期:2014-06-30 19:29:262014年世界杯参赛球队:西班牙
日期:2014-07-08 21:49:56ITPUB元老
日期:2014-08-04 21:10:48优秀写手
日期:2014-09-24 06:00:13itpub13周年纪念徽章
日期:2014-10-03 10:51:25itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50
3#
发表于 2012-2-2 22:34 | 只看该作者

回帖奖励 +2

貌似楼上的没有LONG型的判断啊

使用道具 举报

回复
论坛徽章:
519
奥运会纪念徽章:垒球
日期: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
4#
发表于 2012-2-2 23:45 | 只看该作者

回帖奖励 +2

使用道具 举报

回复
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
5#
发表于 2012-2-3 13:21 | 只看该作者
参考asktom后,随便给一种方法:

SQL> create or replace function long_2_varchar (
  2                                              p_table_owner    in all_tab_partitions.table_owner%type,
  3                                              p_table_name     in all_tab_partitions.table_name%type,
  4                                              p_partition_name in all_tab_partitions.partition_name%type
  5                                             )
  6  return varchar2
  7  as
  8    l_high_value LONG;
  9  begin
10    select high_value
11      into l_high_value
12      from all_tab_partitions
13     where table_owner    = p_table_owner
14       and table_name     = p_table_name
15       and partition_name = p_partition_name;
16  
17    return substr( l_high_value, 1, 4000 );
18  end;
19  /

Function created

SQL> select t.table_name,t.high_value,long_2_varchar(user,t.table_name,t.partition_name) from user_tab_partitions t;

TABLE_NAME                     HIGH_VALUE                                                                       LONG_2_VARCHAR(USER,T.TABLE_NA
------------------------------ -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
SALES                          TO_DATE(' 1999-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA TO_DATE(' 1999-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
SALES                          TO_DATE(' 1999-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA TO_DATE(' 1999-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
SALES                          TO_DATE(' 2000-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA TO_DATE(' 2000-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
SALES                          TO_DATE(' 1999-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA TO_DATE(' 1999-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
SALES                          TO_DATE(' 2000-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA TO_DATE(' 2000-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
SALES                          TO_DATE(' 2000-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA TO_DATE(' 2000-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
SALES                          TO_DATE(' 2000-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA TO_DATE(' 2000-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
SALES                          TO_DATE(' 2001-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA TO_DATE(' 2001-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

8 rows selected

SQL>

使用道具 举报

回复
论坛徽章:
8
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22灰彻蛋
日期:2011-11-08 00:28:222012新春纪念徽章
日期:2012-01-04 11:55:052012新春纪念徽章
日期:2012-02-07 09:59:35ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:332013年新春福章
日期:2013-02-25 14:51:24ITPUB社区12周年站庆徽章
日期:2013-10-08 17:44:422017金鸡报晓
日期:2017-01-10 15:33:11
6#
发表于 2014-8-13 15:29 | 只看该作者
bucuo\

使用道具 举报

回复
论坛徽章:
22
2014年世界杯参赛球队: 哥斯达黎加
日期:2014-06-06 15:02:04沸羊羊
日期:2015-06-17 14:51:07天枰座
日期:2015-07-17 09:51:12金牛座
日期:2016-03-21 21:10:40摩羯座
日期:2016-03-29 15:07:30娜美
日期:2016-06-22 19:49:29奥运会纪念徽章:篮球
日期:2016-09-02 09:45:25奥运会纪念徽章:现代五项
日期:2016-09-23 16:25:05山治
日期:2018-01-04 21:26:162015年新春福章
日期:2015-04-27 10:18:48
7#
发表于 2014-8-13 16:07 | 只看该作者
直接定义一个varchar2类型变量赋值试试
select high_value,partition_name into v_high_value,v_part_name  from USER_TAB_PARTITIONS where table_name='S_AI_PR_LOAN_ACCO_AMT_INFO' and AND table_owner = 'SDW'

使用道具 举报

回复
论坛徽章:
0
8#
发表于 2015-12-27 01:33 | 只看该作者

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期: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
9#
发表于 2015-12-27 08:20 | 只看该作者
放不下的怎么办

使用道具 举报

回复

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

本版积分规则 发表回复

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