黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Oracle Raw,number,varchar2...轉(zhuǎn)換

系統(tǒng) 2449 0

Oracle?Raw,number,varchar2... 轉(zhuǎn)換

? 在網(wǎng)絡(luò)中的計(jì)算機(jī)之間傳輸 RAW 數(shù)據(jù)時(shí),或者使用 Oracle 實(shí)用程序?qū)?RAW 數(shù)據(jù)從一個(gè) 數(shù)據(jù)庫 移到另一個(gè)數(shù)據(jù)庫時(shí),Oracle 服務(wù)器不執(zhí)行字符集轉(zhuǎn)換。存儲(chǔ)實(shí)際列值所需要的字節(jié)數(shù)大小隨每行大小而異,最多為 2,000 字節(jié)。
可能這樣的數(shù)據(jù)類型在數(shù)據(jù)庫效率上會(huì)提高, 而且對(duì)數(shù)據(jù)由于字符集的不同而導(dǎo)致的不一致的可能性在這邊也排除了。
這個(gè)字段在實(shí)際的用途中好像不多。
raw類型的介紹,在此引用了一下 網(wǎng)友的blog:
RAW,類似于CHAR,聲明方式RAW(L),L為長(zhǎng)度,以字節(jié)為單位,作為數(shù)據(jù)庫列最大2000,作為變量最大32767字 節(jié)。
LONG RAW,類似于LONG,作為數(shù)據(jù)庫列最大存儲(chǔ)2G字節(jié)的數(shù)據(jù),作為變量最大32760字節(jié)

==============================================================
SQL> create table datatype_test_raw(paddr raw(8));

Table created

SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'));

insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'))

ORA-01401: inserted value too large for column

SQL> alter table datatype_test_raw modify paddr raw(20);

Table altered

SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'));

insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'))

ORA-01401: inserted value too large for column

SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw test!'));

1 row inserted

SQL> commit;

Commit complete

SQL> select * from datatype_test_raw;

PADDR
----------------------------------------
54686973206973206120726177207465737421

SQL> select utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;

UTL_RAW.CAST_TO_VARCHAR2(PADDR
--------------------------------------------------------------------------------
This is a raw test!

SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('中文測(cè)試'));

1 row inserted

SQL> commit;

Commit complete

SQL> select utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;

UTL_RAW.CAST_TO_VARCHAR2(PADDR
--------------------------------------------------------------------------------
This is a raw test!

?


中文測(cè)試:

SQL> select paddr, utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;

PADDR?????????????????????????? UTL_RAW.CAST_TO_VARCHAR2(PADDR
---------------------- --------------------------------------------------------------------------------
54686973206973206120726177207465737421 This is a raw test!
D6D0CEC4B2E2CAD4 中文測(cè)試

這里用到了兩個(gè)函數(shù):
utl_raw.cast_to_raw([varchar2]);-- 將varchar2轉(zhuǎn)換為raw類型
utl_raw.cast_to_varchar2([raw]);--將raw轉(zhuǎn)換為varchar2類型
這 里varchar2的字符集一般是GB2312。

另外:
utl_raw包的幾個(gè)其他的函數(shù)用法:
utl_raw.cast_from_number([number]);
utl_raw.cast_to_number([number]);
位 操作:
utl_raw.bit_or();
utl_raw.bit_and();
utl_raw.bit_xor();

另 外還有轉(zhuǎn)換函數(shù):
hextoraw(); --將對(duì)應(yīng)16進(jìn)制數(shù)轉(zhuǎn)換為raw

?

當(dāng)使用HEXTORAW時(shí),會(huì)把字符串中數(shù)據(jù)當(dāng)作16進(jìn)制數(shù)。而使用 UTL_RAW.CAST_TO_RAW時(shí),直接把字符串中每個(gè)字符的ASCII碼存放到RAW類型的字段中。

RAW,類似于CHAR,聲明方式RAW(L),L為長(zhǎng)度,以字節(jié)為單位,作為數(shù)據(jù)庫列最大2000,作為變量最大32767字節(jié)。
LONG RAW,類似于LONG,作為數(shù)據(jù)庫列最大存儲(chǔ)2G字節(jié)的數(shù)據(jù),作為變量最大32760字節(jié)
建表操作:
create table raw_test (id number, raw_date raw(10));
插入raw數(shù)據(jù)操作:
insert into raw_test values (1, hextoraw('ff'));
insert into raw_test values (utl_raw.cast_to_raw('051'));
刪除表操作:
drop table raw_test;
當(dāng)使用HEXTORAW時(shí),會(huì)把字符串中數(shù)據(jù)當(dāng)作16進(jìn)制數(shù)。而使用UTL_RAW.CAST_TO_RAW時(shí),直接把字符串中每個(gè)字符的 ASCII碼存放到RAW類型的字段中.

可以使用dump函數(shù),查詢存儲(chǔ)情況:
select id,raw_date, dump(raw_date, 16) dump_raw from raw_test;

Oracle中RAW和Varchar2常用的兩個(gè)轉(zhuǎn)換函數(shù)??????????????????????????????????
1. UTL_RAW.CAST_TO_RAW
該函數(shù)按照缺省字符集(一般為GB2312),將VARCHAR2字符串轉(zhuǎn)換為RAW。
insert into cmpp_submit (dest_terminal_id,msg_content) values('13001081371',UTL_RAW.CAST_TO_RAW('您好!'));
2. UTL_RAW.CAST_TO_VARCHAR2
該函數(shù)按照缺省字符集合(一般為GB2312),將RAW轉(zhuǎn)換為VARCHAR2。
select UTL_RAW.CAST_TO_VARCHAR2(msg_content) from cmpp_deliver;

其實(shí)RAW和VARCHAR是類似的,只是存儲(chǔ)在RAW里的是二進(jìn)制值,在任何時(shí)候不會(huì)做自動(dòng)的字符集轉(zhuǎn)換,這是RAW和VARCHAR的不 同,RAW只是一種外部類型,其內(nèi)部存儲(chǔ)是VARRAW
VARCHAR的Oracle內(nèi)部定義是:struct { ub2 len; char arr[n] }
VARRAW的ORACLE內(nèi)部定義是: struct { ub2 len; unsigned char arr[n] }

Oracle Raw,number,varchar2...轉(zhuǎn)換


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論