Oracle 存储过程中动态创建目录directory解决思路
Oracle 存储过程中动态创建目录directory
vc++中通过调用存储过程 上传图片,已将通过存储过程只能上传不大于32K文件解决了,现在问题是 只能上传指定路径的图片,现在想在存储过程中 动态创建directory,然后能上传任意路径的图片到数据中指定数据类型为BLOB的字段中,存储过程中动态创建directory成功,但是调试程序时,总是出错。
create or replace procedure AddPicture(StdentID in varchar2,blob,v_picname in varchar2,filename in varchar2) is
f_lob BFILE; --文件类型
b_lob BLOB;
--filename 图片名称
--v_picname 创建directory的路径
begin
INSERT INTO stpic(stid,studpic,stpicname) VALUES (StdentID,EMPTY_BLOB(),filename) RETURN studpic INTO b_lob;
v_sql := 'create or replace directory IMAGEANY as '''||v_picname||'''';
execute immediate v_sql;
--插入空的blob
f_lob:=bfilename('IMAGEANY',filename);
--获取指定目录下的文件
dbms_lob.fileopen(f_lob,dbms_lob.file_readonly);
--以只读的方式打开文件
dbms_lob.loadfromfile(b_lob,f_lob,dbms_lob.getlength(f_lob));
--传递对象
dbms_lob.fileclose(f_lob);
--关闭原始文件
COMMIT;
end AddPicture;
------解决方案--------------------
我也不知道这个错误是怎么引起的,一步一步排查。
首先在确认下载PLSQL中调用是否正确,然后再来找是不是其他的问题。
vc++中通过调用存储过程 上传图片,已将通过存储过程只能上传不大于32K文件解决了,现在问题是 只能上传指定路径的图片,现在想在存储过程中 动态创建directory,然后能上传任意路径的图片到数据中指定数据类型为BLOB的字段中,存储过程中动态创建directory成功,但是调试程序时,总是出错。
create or replace procedure AddPicture(StdentID in varchar2,blob,v_picname in varchar2,filename in varchar2) is
f_lob BFILE; --文件类型
b_lob BLOB;
--filename 图片名称
--v_picname 创建directory的路径
begin
INSERT INTO stpic(stid,studpic,stpicname) VALUES (StdentID,EMPTY_BLOB(),filename) RETURN studpic INTO b_lob;
v_sql := 'create or replace directory IMAGEANY as '''||v_picname||'''';
execute immediate v_sql;
--插入空的blob
f_lob:=bfilename('IMAGEANY',filename);
--获取指定目录下的文件
dbms_lob.fileopen(f_lob,dbms_lob.file_readonly);
--以只读的方式打开文件
dbms_lob.loadfromfile(b_lob,f_lob,dbms_lob.getlength(f_lob));
--传递对象
dbms_lob.fileclose(f_lob);
--关闭原始文件
COMMIT;
end AddPicture;
------解决方案--------------------
我也不知道这个错误是怎么引起的,一步一步排查。
首先在确认下载PLSQL中调用是否正确,然后再来找是不是其他的问题。