存完后,表中 fname(BFILE)这项的数值竟是 <VALUE ERROR>,.这是正常的数值吗?
具体的:(大家看看我错在那里。在客户端使用PL\SQL)
1、 create or replace directory ding_dir as 'd:\mytry'; ——在我电脑D盘新建文件夹mytry,存放1.jpg
2、 create table ding_bfiletest(ID number(8),fname blob);
create table ding_BLOBTEST(ID number(8),blobname blob);
3、 INSERT INTO ding_bfiletest VALUES (1, BFILENAME ('ding_dir', '1.jpg'));
4、读取bfile ,我编了个过程ding_bfile_blob_test
create or replace procedure ding_bfile_blob_test(tid in number, filename in varchar2, filedir in varchar2,upmessage out varchar2) is
blob_loc BLOB;
bfile_loc BFILE;
begin
INSERT INTO ding_BLOBTEST(ID,blobname) VALUES(TID,EMPTY_BLOB()) RETURN blobname INTO blob_LOC;
bfile_loc := BFILENAME(filedir,filename);
/* 假如bfile文件实际存在 */
IF (DBMS_LOB.FILEEXISTS(bfile_loc) != 0) THEN
/* 打开bfile源文件 */
DBMS_LOB.OPEN(bfile_loc, DBMS_LOB.LOB_READONLY);
/* 打开目标blob: */
DBMS_LOB.OPEN(blob_loc, DBMS_LOB.LOB_READWRITE);
/*从文件中装入 */
DBMS_LOB.LOADFROMFILE(blob_loc, bfile_loc,DBMS_LOB.GETLENGTH(bfile_loc));
/* 记得关闭: */
DBMS_LOB.CLOSE(blob_loc);
DBMS_LOB.CLOSE(bfile_loc);
COMMIT;
upmessage := '0';
END IF;
EXCEPTION WHEN OTHERS THEN ROLLBACK;
upmessage := '操作失败';
end ding_bfile_blob_test;
我要问的两点: ①执行3后,查看ding_bfiletest,表中 fname(BFILE)这项的数值竟是 <VALUE ERROR>,.这是正常的数值吗? ②测试函数过程,总显示'操作失败'?
为什么呢?为什么呢?
为什么呢?
为什么呢?
为什么呢?
具体的:(大家看看我错在那里。在客户端使用PL\SQL)
1、 create or replace directory ding_dir as 'd:\mytry'; ——在我电脑D盘新建文件夹mytry,存放1.jpg
2、 create table ding_bfiletest(ID number(8),fname blob);
create table ding_BLOBTEST(ID number(8),blobname blob);
3、 INSERT INTO ding_bfiletest VALUES (1, BFILENAME ('ding_dir', '1.jpg'));
4、读取bfile ,我编了个过程ding_bfile_blob_test
create or replace procedure ding_bfile_blob_test(tid in number, filename in varchar2, filedir in varchar2,upmessage out varchar2) is
blob_loc BLOB;
bfile_loc BFILE;
begin
INSERT INTO ding_BLOBTEST(ID,blobname) VALUES(TID,EMPTY_BLOB()) RETURN blobname INTO blob_LOC;
bfile_loc := BFILENAME(filedir,filename);
/* 假如bfile文件实际存在 */
IF (DBMS_LOB.FILEEXISTS(bfile_loc) != 0) THEN
/* 打开bfile源文件 */
DBMS_LOB.OPEN(bfile_loc, DBMS_LOB.LOB_READONLY);
/* 打开目标blob: */
DBMS_LOB.OPEN(blob_loc, DBMS_LOB.LOB_READWRITE);
/*从文件中装入 */
DBMS_LOB.LOADFROMFILE(blob_loc, bfile_loc,DBMS_LOB.GETLENGTH(bfile_loc));
/* 记得关闭: */
DBMS_LOB.CLOSE(blob_loc);
DBMS_LOB.CLOSE(bfile_loc);
COMMIT;
upmessage := '0';
END IF;
EXCEPTION WHEN OTHERS THEN ROLLBACK;
upmessage := '操作失败';
end ding_bfile_blob_test;
我要问的两点: ①执行3后,查看ding_bfiletest,表中 fname(BFILE)这项的数值竟是 <VALUE ERROR>,.这是正常的数值吗? ②测试函数过程,总显示'操作失败'?
为什么呢?为什么呢?
为什么呢?
为什么呢?
为什么呢?
解决方案 »
- 问一个存储过程的问题,各位高手来看看,我卡住了
- 求SQL~
- 关于周报表的问题?求教!
- 不同用户的访问权限
- 监听程序配置报错~~~求助!!!
- Oracle中有Sqlserver的openrowset这样的函数么,我要在存储过程中进行分布式数据处理也
- 各位在ORACLE中写SQL,除了PLUS/SQL还有没有别的,这东西好差劲啊,进则有分!!
- 请问:Oracle怎么才能像SQL Server那样连续执行多条SQL语句,
- 有关增加外键的问题,进来看看吧!
- oracle exp EXP-00091: Exporting questionable statistics.对dmp有影响不
- 修改一个SQL语句,count()的使用方法
- 基于Oracle下航空系统之QAR数据库应用系统实例开发,招人团购啦!
出现<VALUE ERROR>肯定是出错了!!--你出错的原因有两点:
1.directory的引用要使用大写的.
2.文件的引用要带'\',否则directory+filename就会缺少'\'
--下面的测试在10g成功:
create or replace directory ding_dir as 'd:\mytry';
--/*在我电脑D盘新建文件夹mytry,存放1.jpg */
create table ding_bfiletest(ID number(8),fname BFILE);
create table ding_BLOBTEST(ID number(8),blobname blob);
SELECT * FROM ding_BLOBTEST;
INSERT INTO ding_bfiletest VALUES (2, BFILENAME ('DING_DIR', '1.jpg'));
SELECT * FROM ding_bfiletest;
--输出:
ID FNAME
1 <BFILE>--********
CREATE OR REPLACE PROCEDURE DING_BFILE_BLOB_TEST(TID IN NUMBER,
FILENAME IN VARCHAR2,
FILEDIR IN VARCHAR2,
UPMESSAGE OUT VARCHAR2) IS
BLOB_LOC BLOB;
BFILE_LOC BFILE;
BEGIN
INSERT INTO DING_BLOBTEST
(ID, BLOBNAME)
VALUES
(TID, EMPTY_BLOB()) RETURN BLOBNAME INTO BLOB_LOC;
BFILE_LOC := BFILENAME(FILEDIR, FILENAME);
/* 假如bfile文件实际存在 */
IF (DBMS_LOB.FILEEXISTS(BFILE_LOC) != 0) THEN
/* 打开bfile源文件 */
DBMS_LOB.OPEN(BFILE_LOC, DBMS_LOB.LOB_READONLY);
/* 打开目标blob: */
DBMS_LOB.OPEN(BLOB_LOC, DBMS_LOB.LOB_READWRITE);
/*从文件中装入 */
DBMS_LOB.LOADFROMFILE(BLOB_LOC,
BFILE_LOC,
DBMS_LOB.GETLENGTH(BFILE_LOC));
/* 记得关闭: */
DBMS_LOB.CLOSE(BLOB_LOC);
DBMS_LOB.CLOSE(BFILE_LOC);
COMMIT;
UPMESSAGE := '0';
END IF;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
UPMESSAGE := '操作失败';
END DING_BFILE_BLOB_TEST;
/DECLARE
v_o VARCHAR2(2000);
BEGIN
DING_BFILE_BLOB_TEST(1,'\'||'1.jpg','DING_DIR',v_o);
dbms_output.put_line(v_o);
END;
/SELECT * FROM DING_BLOBTEST;
--输出:
ID BLOBNAME
1 <BLOB>
注:
PLSQL Developer 7.0.1.1066.exe
ora9i
本机没有安装Oracle数据库,通过客户端PL/SQL访问数据库的
v_o VARCHAR2(2000);
BEGIN
DING_BFILE_BLOB_TEST(1,'\'||'1.jpg','DING_DIR',v_o);
dbms_output.put_line(v_o);
END;
/
///
/DECLARE
v_o VARCHAR2(2000);
BEGIN
DING_BFILE_BLOB_TEST(1,'1.jpg','DING_DIR',v_o);
dbms_output.put_line(v_o);
END;
/
///
我把这两个放入test window里面测试,都没有提示错误〉??
但我点击Procedures-->DING_BFILE_BLOB_TEST右键-->test
在filename里面输入参数 1.jpg,就提示“操作错误”
在filename里面输入参数 \1.jpg,就没有提示错误。