日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql long varchar2_long查询结果转换为varchar2类型

發(fā)布時間:2024/9/19 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql long varchar2_long查询结果转换为varchar2类型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

來自Thomas Kyte 《Oracle9i/10g/11g編程藝術(shù)》 12章節(jié)中.由于long的操作限制,那么在操作long之前可以將該類型的結(jié)果轉(zhuǎn)換為varchar2然后再使用,long_help.substr_of的基本意思是將long結(jié)果的的前4000字節(jié)轉(zhuǎn)換為varchar2類型.如果long的數(shù)據(jù)超過了4000字節(jié),那么可以將循環(huán)調(diào)用此函數(shù)

create or replace package long_help

authid current_user

as

function substr_of

( p_query in varchar2,

p_from in number,

p_for in number,

p_name1 in varchar2 default NULL,

p_bind1 in varchar2 default NULL,

p_name2 in varchar2 default NULL,

p_bind2 in varchar2 default NULL,

p_name3 in varchar2 default NULL,

p_bind3 in varchar2 default NULL,

p_name4 in varchar2 default NULL,

p_bind4 in varchar2 default NULL )

return varchar2;

end;

create or replace package body long_help

as

g_cursor number := dbms_sql.open_cursor;

g_query varchar2(32765);

procedure bind_variable( p_name in varchar2, p_value in varchar2 )

is

begin

if ( p_name is not null )

then

dbms_sql.bind_variable( g_cursor, p_name, p_value );

end if;

end;

function substr_of

( p_query in varchar2,

p_from in number,

p_for in number,

p_name1 in varchar2 default NULL,

p_bind1 in varchar2 default NULL,

p_name2 in varchar2 default NULL,

p_bind2 in varchar2 default NULL,

p_name3 in varchar2 default NULL,

p_bind3 in varchar2 default NULL,

p_name4 in varchar2 default NULL,

p_bind4 in varchar2 default NULL )

return varchar2

as

l_buffer varchar2(4000);

l_buffer_len number;

begin

if ( nvl(p_from,0) <= 0 )

then

raise_application_error

(-20002, 'From must be >= 1 (positive numbers)' );

end if;

if ( nvl(p_for,0) not between 1 and 4000 )

then

raise_application_error

(-20003, 'For must be between 1 and 4000' );

end if;

if ( p_query <> g_query or g_query is NULL )

then

if ( upper(trim(nvl(p_query,'x'))) not like 'SELECT%')

then

raise_application_error

(-20001, 'This must be a select only' );

end if;

dbms_sql.parse( g_cursor, p_query, dbms_sql.native );

g_query := p_query;

end if;

bind_variable( p_name1, p_bind1 );

bind_variable( p_name2, p_bind2 );

bind_variable( p_name3, p_bind3 );

bind_variable( p_name4, p_bind4 );

dbms_sql.define_column_long(g_cursor, 1);

if (dbms_sql.execute_and_fetch(g_cursor)>0)

then

dbms_sql.column_value_long

(g_cursor, 1, p_for, p_from-1,

l_buffer, l_buffer_len );

end if;

return l_buffer;

end substr_of;

end;

使用方法:查詢DBA_TAB_PARTITIONS中的HIGH_VALUE

SELECT *

FROM (SELECT TABLE_OWNER,

TABLE_NAME,

PARTITION_NAME,

LONG_HELP.SUBSTR_OF('SELECT HIGH_VALUE

FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER=:TABLE_OWNER

AND TABLE_NAME=:TABLE_NAME

AND PARTITION_NAME=:PARTITION_NAME',

1,

4000,

'TABLE_OWNER',

TABLE_OWNER,

'TABLE_NAME',

TABLE_NAME,

'PARTITION_NAME',

PARTITION_NAME) HIGH_VALUE

FROM DBA_TAB_PARTITIONS);

總結(jié)

以上是生活随笔為你收集整理的mysql long varchar2_long查询结果转换为varchar2类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。