2012-03-08 18 views
0

にストアドプロシージャからBLOBを取得しますこれは私のストアドプロシージャです:secondArgument列のオラクル

CREATE OR REPLACE 
PROCEDURE prodecureName 
    (
    firstArgument IN NUMBER, 
    secondArgument OUT BLOB) 
AS 
BEGIN 
    SELECT secondArgument 
    INTO prodecureName.secondArgument 
    FROM tableName 
    WHERE firstArgument = prodecureName.firstArgument ; 
END; 

データ型は、(両方ともBLOBある)が有効です。 は、この手順を実行する間、私はこのエラーを取得する:

Wrong number or types of arguments in call to prodecureName

私は、ストアドプロシージャからのブロブを取得できますか?このプロシージャをコールする

+0

あなたも、呼び出し元のコードを投稿することができますか?エラーはそこにある可能性があります –

+0

コードは関係ありません。 SQL Developerからこのプロシージャをコールしようとします。私はこの同じエラーを取得します。 – ogrod87

+2

それはあなたがそれを呼び出す方法が間違っているように見えるので、問題はありません。 –

答えて

1

一つの方法:

declare 
    l_blob blob; 
begin 
    procedurename(1,l_blob); 
end; 

エラーメッセージは、パラメータの間違ったタイプまたはパラメータの数が間違ってこれを呼び出していることを示しています。最初のパラメータは、型numberのbyで、型blobの2番目のパラメータでなければなりません。

0

は(代わりにブロブのCLOBが、同じアプローチを使用して)のようなものを試してみてください:

drop table tst_clob_tab; 
create table tst_clob_tab 
(
    id number, 
    my_clob clob 
); 

-- Oracle will implicitly convert to clob (9i greater) 
insert into tst_clob_tab(id,my_clob) values (1,'This is some large value...'); 
commit; 

-- Create procedure 
create or replace procedure tst_clob(p_1 in number, p_2 out clob) as 
begin 
    select my_clob 
    into p_2 
    from tst_clob_tab 
    where id = p_1; 
end; 

-- Call procedure 
declare 
    l_clob clob; 
begin 
    tst_clob(1,l_clob); 
    dbms_output.put_line('Clob: ' || l_clob); 
end;