簡體   English   中英

將字節數組作為參數傳遞給oracle中的存儲過程

[英]Passing byte array as parameter to stored procedure in oracle

我有功能,需要將其作為存儲過程放入Oracle數據庫(我正在使用11g)中。 假設此函數如下所示:

public static BLOB useByteArray(byte[] byteArray){
    //do something with this byte array, return BLOB with something
}

那么包裝函數應該如何看待? 我知道這將是圍繞

CREATE OR REPLACE FUNCTION USE_BYTE_ARRAY(byteArray ???) RETURN BLOB IS
 LANGUAGE JAVA NAME 'com.example.something.useByteArray(byte[]???)';

但是我不知道如何在包裝器和Java函數之間傳遞此字節數組。 也許,在Base64中對其進行編碼,作為字符串傳遞,然后在useByteArray方法中進行編碼?

提前致謝 :)

我猜您可以使用OracleTypes.BLOB從Java應用程序傳遞數據,並且可以在存儲過程中使用blob數據類型使用它。

對於這種要求,可以使用oracle的SYS REF CURSOR。 我們可以將值的數組發送到存儲過程。

1)SYS REF CURSOR聲明:

CREATE OR REPLACE PACKAGE TEST_CURSOR AS

TYPE testCursorType為REF CURSOR; 結束;

2)創建ORACLE類型的表來接受ARRAY

CREATE OR REPLACE TYPE tabletype AS TABLE OF NUMBER(10);

3)建立程序

 CREATE OR REPLACE PROCEDURE testProc
(adeptno tabletype,
testFetch IN OUT test_cursor.testCursorType) AS
BEGIN
OPEN testFetch FOR 
SELECT * 
FROM emp
WHERE deptno IN (SELECT *
FROM TABLE(CAST(adeptno AS tabletype)));
END;

4)最后是JAVA代碼

private static final String ARRAY_PROCEDURE = "call testProc(?,?)";
int arrayElements[] = {10,20,30,40};
//Create an Array Descriptor
ArrayDescriptor deptdesc = ArrayDescriptor.createDescriptor("TABLETYPE",connObj);
//Define the Array (Descriptor,connection, Elements)
ARRAY deptarray = new ARRAY(deptdesc, connObj, arrayElements);
this.executePrepareQuery(conn, ARRAY_PROCEDURE,deptarray);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM