嘿,我正在尝试找到一种方法让它运行起来。我正在使用 oracle 数据库 10g,其中我将 blob 存储在一个表中。我希望能够读出一个 blob 并将其传递给我的 java 代码中的 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 存储过程(包装器)
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'
关于让它运行的任何建议?感谢您的宝贵时间。
这是我的程序测试方法中的 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;
最佳答案
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
:
从 blobtest 中选择 dbms_lob.getLength(filecontents);
关于java - 使用 Oracle JVM 将 blob 作为参数传递给 java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4782313/