Oracle
 sql >> база данни >  >> RDS >> Oracle

Извикване на Oracle обектно-ориентирани PL/SQL процедури-членове от JDBC

В jdbc можете да анализирате и изпълнявате PL/SQL блокове с out променливи. Можете да подготвите оператор за извикване като:

declare
    x foo_type;
begin
    x := foo_type(5);
    x.proc(10);
    ? := x.func(2);
end;

След това можете да използвате CallableStatement.registerOutParameter и след като операторът е изпълнен, използвайте подходящия get функция за извличане на стойността.

Можете да получите директен достъп до FOO_TYPE въведете директно в java, но наистина ли искате да направите това? Вижте по-долу за работещ пример:

SQL> create or replace and compile java source named "TestOutParam" as
  2  import java.sql.*;
  3  import oracle.sql.*;
  4  import oracle.jdbc.driver.*;
  5  
  6  public class TestOutParam {
  7  
  8     public static int get() throws SQLException {
  9  
 10        Connection conn =
 11           new OracleDriver().defaultConnection();
 12  
 13        StructDescriptor itemDescriptor =
 14           StructDescriptor.createDescriptor("FOO_TYPE",conn);
 15  
 16        OracleCallableStatement call =
 17           (OracleCallableStatement) conn.prepareCall("declare\n"
 18              + "    x foo_type;\n"
 19              + "begin\n"
 20              + "    x := foo_type(5);\n"
 21              + "    x.proc(10);\n"
 22              + "    ? := x;\n"
 23              + "end;\n");
 24  
 25        call.registerOutParameter(1, OracleTypes.STRUCT, "FOO_TYPE");
 26  
 27        call.execute();
 28  
 29        STRUCT myObj = call.getSTRUCT(1);
 30  
 31        Datum[] myData = myObj.getOracleAttributes();
 32  
 33        return myData[0].intValue();
 34  
 35     }
 36  }
 37  /

Това е тестов клас, който показва как можете да използвате метода registerOutParameter на SQL обект, нека го наречем:

SQL> CREATE OR REPLACE
  2  FUNCTION show_TestOutParam RETURN NUMBER
  3  AS LANGUAGE JAVA
  4  NAME 'TestOutParam.get() return java.lang.int';
  5  /

Function created

SQL> select show_testoutparam from dual;

SHOW_TESTOUTPARAM
-----------------
               20



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Механизъм, следван от Oracle, когато правим горещо архивиране

  2. Върнете името на краткия месец от дата в Oracle

  3. Как да добавите сървъра за управление в R12.2

  4. Вмъкване на множество редове с последователност в Oracle

  5. ORACLE SQL получава разлика от две стойности, извлечени от 2 оператора за избор