嘿,我正试图找到一种方法让它运行起来。我正在使用oracle数据库10g,我将blob存储在一个表中。我希望能够在我的java代码中读出并将blob传递给java方法。我通过loadjava在我的数据库中加载了我的java类。我也存放了存储blob的表格。
这是我的java类和我想传递BLOB的方法
import java.lang.*;
import java.sql.*;
import oracle.sql.*;
public class Test
{
public static void getWidth(BLOB myBlob) throws Exception
{
System.out.println(myblob.length());
}
};
这是我在PL / SQL中的Java存储过程(Wrapper)
CREATE OR REPLACE PROCEDURE testmethod (p_blob IN BLOB)
AS LANGUAGE JAVA
NAME 'Test.getWidth(oracle.sql.BLOB)';
它将java类加载到数据库中,我的包装器也会编译并存储。
当我想要运行execute testmethod(testphoto.jpg);
它给了我错误:'testphoto.jpg must be declared'
任何建议让这个运行?谢谢你的时间。
这是我的程序testmethod中的PL / SQL BLock:
DECLARE
P_FILE VARCHAR2(200);
P_BLOB BLOB;
BEGIN
P_FILE := NULL;
P_BLOB := NULL;
TESTMETHOD(
P_FILE => P_FILE,
P_BLOB => P_BLOB
);
END;
答案 0 :(得分:3)
testphoto.jpg
只是您要传递给方法的文件的名称。您需要将该文件的内容作为blob传递到您的过程中。您将需要代码来实际将文件内容加载到blob变量中,或者如果它已经在数据库中,则从表中提取它。然后你将它作为第二个参数传递给你的程序。
如果你想测试它,你可以创建一个临时表并加载一些blob数据,如下所示:
create table blobtest (filecontents blob);
insert into blobtest values (utl_raw.cast_to_raw('Test Data'));
然后,您可以从sqlplus运行一些pl / sql来提取数据并将其传递给您的程序:
declare
temp blob;
filename varchar2(200) := 'Test';
begin
select filecontents
into temp
from blobtest;
testmethod(filename, temp);
end;
/
当然,如果数据已经在表格中并且你想要一个blob的长度,你可以使用dbms_lob
函数getLength
,如下所示:
select dbms_lob.getLength(filecontents) from blobtest;