one-on-one下“用PL/SQL来装载LOB”?

[复制链接]
查看11 | 回复9 | 2007-9-26 18:42:10 | 显示全部楼层 |阅读模式
cjf@CJF>create or replace directory blobdir as 'e:\';
目录已创建。
cjf@CJF>create or replace directory "blobdir2" as 'e:\';
目录已创建。
cjf@CJF>
cjf@CJF>create table demo (id int primary key,theclob clob);
表已创建。
cjf@CJF>host echo 'Hello World\!' >e:\test.txt
cjf@CJF>declare
l_clob clob;
l_bfile bfile;
begin
insert into demo values(1,empty_clob()) returning theclob into l_clob;
l_bfile:=bfilename('BLOBDIR','test.txt');
dbms_lob.fileopen(l_bfile);
dbms_lob.loadfromfile(l_clob,l_bfile,dbms_lob.getlength(l_bfile));
dbms_lob.fileclose(l_bfile);
end;
/
PL/SQL 过程已成功完成。
cjf@CJF>
cjf@CJF>select dbms_lob.getlength(theclob),theclob from demo;
DBMS_LOB.GETLENGTH(THECLOB)
---------------------------
THECLOB
-------------------------------------------------------------------------

9
?汥潬圠牯摬???

cjf@CJF>host echo Hello World! >e:\test2.txt
cjf@CJF>declare
l_clob clob;
l_bfile bfile;
begin
insert into demo values(3,empty_clob()) returning theclob into l_clob;
l_bfile:=bfilename('BLOBDIR','test2.txt');
dbms_lob.fileopen(l_bfile);
dbms_lob.loadfromfile(l_clob,l_bfile,dbms_lob.getlength(l_bfile));
dbms_lob.fileclose(l_bfile);
end;
/
PL/SQL 过程已成功完成。
cjf@CJF>select dbms_lob.getlength(theclob),theclob from demo where id=3;
DBMS_LOB.GETLENGTH(THECLOB)
---------------------------
THECLOB
--------------------------------------------------------------------------------

7
效汬?潗汲Ⅴ?

cjf@CJF>
cjf@CJF>
E:\>type test.txt
'Hello World\!'
E:\>type test2.txt
Hello World!
E:\>
我的os是windowsxp,oracle是9.2.0.1,oracle server就是本机(我的工作机)。应该不是显示问题,因为theclob的长度比文件中的小了。
这是为什么呢?
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
windows的环境下。
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
明显是字符问题,你的server是什么,nls_lang是什么,xp的默认语言是什么
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
我也觉得是字符的问题
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
但DBMS_LOB.GETLENGTH(THECLOB)不对啊,再怎么样也不应该小于字母符号的个数吧
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
怎么不对了?你一个字符一个字符数肯定对,就是因为你导入的时候字符转化有问题
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
我查注册表的oracle\home0\nls_lang的值为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
而登陆DB:
cjf@CJF>show parameter nls_
NAME
TYPEVALUE
------------------------------------ ----------- ------------------------
nls_calendar
string
nls_comp
string
nls_currency
string
nls_date_format
string
nls_date_language
string
nls_dual_currency
string
nls_iso_currency
string
nls_language
stringAMERICAN
nls_length_semantics
stringBYTE
nls_nchar_conv_excp
stringFALSE
nls_numeric_characters
string
nls_sort
string
nls_territory
stringAMERICA
nls_time_format
string
nls_time_tz_format
string
nls_timestamp_format
string
nls_timestamp_tz_format
string
cjf@CJF>
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
你看实例级别的nls干什么?select * from nls_database_parameters
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
cjf@CJF>select * from nls_database_parameters;
PARAMETER
VALUE
------------------------------ ---------------------------------
NLS_LANGUAGE
AMERICAN
NLS_TERRITORY
AMERICA
NLS_CURRENCY
$
NLS_ISO_CURRENCY
AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET
ZHS16GBK
NLS_CALENDAR
GREGORIAN
NLS_DATE_FORMAT
DD-MON-RR
NLS_DATE_LANGUAGE
AMERICAN
NLS_SORT
BINARY
NLS_TIME_FORMAT
HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMATDD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY
$
NLS_COMP
BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP
FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION
9.2.0.1.0
已选择20行。
cjf@CJF>
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
NLS_CHARACTERSET 是一样的。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行