oracle转varchar类型,如何把long类型的数据最终转换成varchar2类型呢?

参考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>