Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Panggil prosedur anggota PL/SQL berorientasi objek Oracle dari JDBC

Di jdbc anda dapat mengurai dan mengeksekusi blok PL/SQL dengan out variabel. Anda dapat menyiapkan pernyataan yang dapat dipanggil seperti:

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

Kemudian Anda dapat menggunakan CallableStatement.registerOutParameter dan setelah pernyataan dieksekusi, gunakan get yang sesuai berfungsi untuk mengambil nilai.

Anda dapat mengakses langsung FOO_TYPE ketik langsung di java, tetapi apakah Anda benar-benar ingin melakukan ini? Lihat di bawah untuk contoh kerja:

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  /

Ini adalah kelas uji untuk menunjukkan bagaimana Anda dapat menggunakan metode registerOutParameter pada objek SQL, sebut saja:

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. ORA-06550:Kesalahan nomor atau jenis argumen saat memanggil fungsi di dalam paket Oracle di ASP.NET

  2. Batalkan operasi penyisipan/perbarui di pemicu menggunakan PL/SQL

  3. Mengapa menanyakan database yang sesuai dengan JDBC dari Oracle tidak semudah pie?

  4. Karakter escape Oracle SQL (untuk '&')

  5. Nilai Pengikatan Array Oracle.DataAccess (ODP.NET) tidak termasuk dalam kisaran yang diharapkan