2011-01-24 12 views
3

ちょっと、これを実行する方法を見つけようとしています。私はテーブルに格納されているblobを持つOracleデータベース10gを使用しています。私は読んで、私のJavaコード内のJavaメソッドにBLOBを渡すことができるようにしたい。 loadjavaを使用してデータベースにJavaクラスをロードしました。私のブロブを保存するテーブルも設定されています。Oracle JVMを使用してJavaメソッドにblobをパラメータとして渡す

それはロードPL/SQLで

CREATE OR REPLACE PROCEDURE testmethod (p_blob IN BLOB) 
AS LANGUAGE JAVA 
NAME 'Test.getWidth(oracle.sql.BLOB)'; 

これは私のJavaクラスと私は

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()); 
    } 

}; 

BLOBを渡したいのですが方法であり、これは私のJavaストアド・プロシージャ(ラッパー)でありますJavaクラスをデータベースに入れ、私のラッパーをコンパイルして保存します。 'testphoto.jpg must be declared'

このランニングを得るために何かアドバイス:

は、私はそれは私にエラーを与えるexecute testmethod(testphoto.jpg);

実行したい場合は?御時間ありがとうございます。

これは私のプロシージャのtestMethodから私のPL/SQLブロックです:

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; 

答えて

3

testphoto.jpgは、メソッドに渡すファイルの名前だけです。そのファイルの内容は、プロシージャに渡すBLOBとして必要です。ファイルの内容を実際にblob変数にロードするコードが必要です。また、データベース内にすでに存在する場合は、テーブルからコードを取り出す必要があります。次に、それをプロシージャの2番目の引数として渡します。あなたはそれをテストしたい場合は

、あなたは一時テーブルを作成し、そのようないくつかのBLOBデータでそれを読み込むことができます、あなたがそのデータを取得するためにSQLPLUSからいくつかのPL/SQLを実行することができます次に

create table blobtest (filecontents blob); 
insert into blobtest values (utl_raw.cast_to_raw('Test Data')); 

ともちろん

declare 
    temp blob; 
    filename varchar2(200) := 'Test'; 
begin 

    select filecontents 
    into temp 
    from blobtest; 

    testmethod(filename, temp); 

end; 
/

を、既にデータがテーブルにあった、あなたはブロブの長さを望んでいた場合、あなたはそのようdbms_lob機能getLengthを使用できます:あなたの手順に渡し

select dbms_lob.getLength(filecontents) from blobtest;

+0

残念ながら、私はこのエラーを得た:*原因:試みは以前にされていなかったと今 をコンパイルするか、正常に解決することはできませんJavaクラス でメソッドを実行しました。 *処置:コールを調整するか、クラスを解決可能にします。 – daniel

+0

'( 'Test Data')' – daniel

+0

に入れなければならないもの@DannyRe:単純なテストのためにブロブに変換していた文字列値でした。 –

関連する問題