Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

जावा संग्रहीत कार्यविधि में java.sql.blob उदाहरण बनाएँ

मैं गलत था। यह कर सकता है सामाप्त करो। मुझे इसे काम करने में थोड़ा समय लगा, लेकिन अंत में, यहाँ एक कार्यशील उदाहरण है:

जावा क्लास

import oracle.jdbc.driver.*;

public class TestBlob {
  public static oracle.sql.BLOB getBlob(String username) throws Exception {
    oracle.jdbc.OracleConnection conn = 
      (oracle.jdbc.OracleConnection)new OracleDriver().defaultConnection();

    oracle.sql.BLOB retBlob =
      oracle.sql.BLOB.createTemporary(conn,
                                      true,
                                      oracle.sql.BLOB.DURATION_SESSION);

    java.io.OutputStream outStr = retBlob.setBinaryStream(0);
    outStr.write(username.getBytes());
    outStr.flush();

    return retBlob;
  }
}

जैसा कि आप देख सकते हैं, मैंने oracle.sql.BLOB . का उपयोग किया है परिणाम के लिए। मैं इसे स्थिर createTemporary . के साथ बनाता हूं BLOB . की विधि वर्ग, यह निर्दिष्ट करते हुए कि इसे सत्र की अवधि के लिए बनाया जाना चाहिए (oracle.sql.BLOB.DURATION_SESSION पैरामीटर)।

फिर, मुझे OutputStream मिलता है और डेटा लिखें। फ्लश की जरूरत थी।

डेटाबेस पक्ष

create or replace FUNCTION getBlobWrp (username IN VARCHAR2) RETURN BLOB
  AS LANGUAGE JAVA NAME
              'TestBlob.getBlob(java.lang.String) return oracle.sql.BLOB';

परीक्षण:

DECLARE
  l_blob BLOB;
BEGIN
  l_blob := getBlobWrp('test');

  dbms_output.put_line(UTL_RAW.CAST_TO_VARCHAR2(l_blob));
END;

आउटपुट:

test

(पिछला उत्तर)

मुझे लगता है कि आपके पास IN OUT BLOB होना चाहिए आपके test_create_excel . में पैरामीटर फ़ंक्शन (इसे एक प्रक्रिया में बदलें), और अपने जावा संग्रहीत विधि के अंदर उस पैरामीटर पर काम करें। मैंने वह तरीका एक बार देखा था।

test_create_excel पर कॉल करने से पहले , आपको एक BLOB बनाना चाहिए वस्तु:

DECLARE
  l_blob BLOB;
BEGIN
  DBMS_LOB.createtemporary(l_blob, TRUE);
  test_create_excel('username', l_blob);
END;

संपादित करें

मुझे नहीं लगता कि आप जो करने की कोशिश कर रहे हैं वह संभव है। हालाँकि, आप उपरोक्त कोड को किसी अन्य फ़ंक्शन में लपेट सकते हैं। यह थोड़ा गड़बड़ है, लेकिन फिर आपके पास एक फ़ंक्शन होगा जो ब्लॉब लौटाता है:

CREATE OR REPLACE FUNCTION get_excel_blob(p_username VARCHAR2) RETURN BLOB
AS
  l_blob BLOB;
BEGIN
  DBMS_LOB.createtemporary(l_blob, TRUE);
  test_create_excel(p_username, l_blob);
  RETURN l_blob;
END;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं DBMS_METADATA (और SCHEMA_EXPORT) के साथ DDL स्क्रिप्ट के रूप में Oracle SCHEMA कैसे प्राप्त करूं?

  2. चयन के रूप में तालिका बनाने के बारे में (CTAS)

  3. ओरेकल प्रतिबद्ध मारता है

  4. APEX_ZIP उदाहरण

  5. COLLATION () Oracle में फंक्शन