java能够调用Oracle的存储过程,反之oracle也能用java来开发外部存储过程,这样java和oracle的相互界限就已经不明确了。
当然关系型数据库最好做自己应该做的事情而不是大包大揽做所有的非数据库应该做的事情。
——开发java类
create or replace and compile java source named BLOBObject as
package MyOracle.BLOB; --自己定义的package
import java.io.*; --外部引用到的java包
import oracle.sql.*;
public class BLOBObject
{
public static String ConvertBLOBtoString(oracle.sql.BLOB BlobContent)
{
byte[] msgContent= BlobContent.getBytes(); //BLOB转换为字节数组
byte[] bytes; //BLOB临时存储字节数组
String newStr = ""; //返回字符串
int i=1; //循环变量
long BlobLength; //BLOB字段长度
try
{
BlobLength=BlobContent.length(); //获取BLOB长度
if (msgContent == null || BlobLength==0) //如果为空,返回空值
{
return "";
}
else //处理BLOB为字符串
{
/*
while(i
{
bytes= BlobContent.getBytes(i,1024) ;
i=i+1024;
newStr = newStr+new String(bytes,"gb2312";
}
*/
newStr = new String(BlobContent.getBytes(1,900),"gb2312"+"...."; //简化处理,只取前900字节
return newStr;
}
}
catch(Exception e) //oracle异常捕获
{
e.printStackTrace();
}
return newStr;
}
}
——然后在Oracle中把这个类导入成为一个函数,执行命令
create or replace function ConvertBLOB(blobObject BLOB)
return varchar2
as language java name
'MyOracle.BLOB.BLOBObject.ConvertBLOBtoString(oracle.sql.BLOB) return java.lang.String';
——执行相应的操作
select ConvertBLOB(BLOBField),dbms_lob.getlength(BLOBField),BLOBFieldfrom TableName
以上代码均在PL/SQL developer中开发并调试通过。
新闻热点
疑难解答
图片精选