java能夠調(diào)用Oracle的存儲(chǔ)過(guò)程,反之oracle也能用java來(lái)開(kāi)發(fā)外部存儲(chǔ)過(guò)程,這樣java和oracle的相互界限就已經(jīng)不明確了。
當(dāng)然關(guān)系型數(shù)據(jù)庫(kù)最好做自己應(yīng)該做的事情而不是大包大攬做所有的非數(shù)據(jù)庫(kù)應(yīng)該做的事情。
——開(kāi)發(fā)java類(lèi)
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轉(zhuǎn)換為字節(jié)數(shù)組
byte[] bytes; //BLOB臨時(shí)存儲(chǔ)字節(jié)數(shù)組
String newStr = ""; //返回字符串
int i=1; //循環(huán)變量
long BlobLength; //BLOB字段長(zhǎng)度
try
{
BlobLength=BlobContent.length(); //獲取BLOB長(zhǎng)度
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"+"...."; //簡(jiǎn)化處理,只取前900字節(jié)
return newStr;
}
}
catch(Exception e) //oracle異常捕獲
{
e.printStackTrace();
}
return newStr;
}
}
——然后在Oracle中把這個(gè)類(lèi)導(dǎo)入成為一個(gè)函數(shù),執(zhí)行命令
create or replace function ConvertBLOB(blobObject BLOB)
return varchar2
as language java name
'MyOracle.BLOB.BLOBObject.ConvertBLOBtoString(oracle.sql.BLOB) return java.lang.String';
——執(zhí)行相應(yīng)的操作
select ConvertBLOB(BLOBField),dbms_lob.getlength(BLOBField),BLOBFieldfrom TableName
以上代碼均在PL/SQL developer中開(kāi)發(fā)并調(diào)試通過(guò)。
新聞熱點(diǎn)
疑難解答
圖片精選