oracle ora-22288,ORA-22288:文件或LOB操作FILEOPEN失败系统找不到指定的路径

我假设您的代码中的文件已经位于c:\ temp目录中。因此,您只将c:\ temp中的现有文件与Oracle上的bfile指针相关联。如果您没有该文件已存在于目标文件夹中,请使用存储过程中列出的代码(如下所示)从C#插入。此代码取自我们开发的Invantive Vision文档管理系统,但您可以随意使用我们代码的这一部分。上传后,您需要在bfile表中插入指针。

进一步检查您是否正在使用ODP.Net和一些最新版本。它解决了许多常见问题。

也始终在insert语句中对列列表进行编码。当Oracle遇到狂野的一天并且您的列被重新排序时,插入将会神奇地失败或产生有趣的效果:

String strSQL = "INSERT INTO BFILETABEL VALUES (" + bFileFileIDS + ",'" + fileName + "', BFILENAME('BFILEIMAGES', '" + getFileNameFromAddress[getFileNameFromAddress.Length - 1] + "'))";

变为

String strSQL =“INSERT INTO BFILETABEL (COLUMN1,COLUMN2,COLUMN3,

COLUMN4) VALUES(“+ bFileFileIDS +”,“”+ fileName +“',

BFILENAME('BFILEIMAGES','“+

getFileNameFromAddress [getFileNameFromAddress.Length - 1] +“'))”;

建议还要使用带参数的东西替换插入语句(重复执行时更快)或正确转义值。也许有人使用带有引号的文件名,这会导致解析SQL时出错。

在目录中上传blob的示例:

procedure write_blob_to_file

( p_directory varchar2

, p_filename varchar2

, p_blob blob

)

as

l_fh utl_file.file_type;

l_blob_length integer;

l_buffer raw(32767);

l_chunk_size binary_integer := 32767;

l_blob_position integer := 1;

begin

l_blob_length := dbms_lob.getlength(p_blob);

l_fh := utl_file.fopen(p_directory, p_filename, 'wb', l_chunk_size);

--

-- Write the BLOB to file in chunks

--

while l_blob_position <= l_blob_length

loop

if l_blob_position + l_chunk_size - 1 > l_blob_length

then

l_chunk_size := l_blob_length - l_blob_position + 1;

end if;

dbms_lob.read(p_blob, l_chunk_size, l_blob_position, l_buffer);

utl_file.put_raw(l_fh, l_buffer, true);

l_blob_position := l_blob_position + l_chunk_size;

end loop;

utl_file.fclose(l_fh);

exception

when others

then

--

-- Close file if necessary.

-- Ignore any errors.

--

begin

if utl_file.is_open(l_fh)

then

utl_file.fclose(l_fh);

end if;

exception

when others

then

null;

end;

--

rollback;

itgen_error_handler.add_to_inner_stack;

raise;

end;

我希望这会对你有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值