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

Извличане на типа таблица на Oracle от съхранената процедура с помощта на JDBC

Не можете да осъществявате достъп до PLSQL обекти (случаи 2 и 5 =обекти на ниво пакет) от java, вижте "java - предаване на масив в запаметената процедура на Oracle". Можете обаче да получите достъп до SQL типове (случай 1 и 4).

За да получите OUT параметри от PL/SQL към java, можете да използвате метода, описан в една от нишката на Tom Kyte, като използвате OracleCallableStatement. Вашият код ще има допълнителна стъпка, тъй като извличате таблица с обект вместо таблица с VARCHAR.

Ето демонстрация, използваща таблица на SQL обект, първо настройката:

SQL> CREATE TYPE t_type AS OBJECT (val VARCHAR(4));
  2  /
Type created

SQL> CREATE TYPE t_table AS TABLE OF t_type;
  2  /
Type created

SQL> CREATE OR REPLACE PROCEDURE p_sql_type (p_out OUT t_table) IS
  2  BEGIN
  3     p_out := t_table(t_type('a'), t_type('b'));
  4  END;
  5  /
Procedure created

Действителният java клас (използвайки dbms_output.put_line за да влезете, защото ще го извикам от SQL, използвайте System.out.println ако се извиква от java):

SQL> CREATE OR REPLACE
  2  AND COMPILE JAVA SOURCE NAMED "ArrayDemo"
  3  as
  4  import java.sql.*;
  5  import oracle.sql.*;
  6  import oracle.jdbc.driver.*;
  7  
  8  public class ArrayDemo {
  9     
 10     private static void log(String s) throws SQLException {
 11        PreparedStatement ps =
 12           new OracleDriver().defaultConnection().prepareStatement
 13           ( "begin dbms_output.put_line(:x); end;" );
 14        ps.setString(1, s);
 15        ps.execute();
 16        ps.close();
 17     }
 18  
 19     public static void getArray() throws SQLException {
 20  
 21        Connection conn = new OracleDriver().defaultConnection();
 22  
 23        OracleCallableStatement cs =
 24           (OracleCallableStatement)conn.prepareCall
 25           ( "begin p_sql_type(?); end;" );
 26        cs.registerOutParameter(1, OracleTypes.ARRAY, "T_TABLE");
 27        cs.execute();
 28        ARRAY array_to_pass = cs.getARRAY(1);
 29  
 30        /*showing content*/
 31        Datum[] elements = array_to_pass.getOracleArray();
 32  
 33        for (int i=0;i<elements.length;i++){
 34           Object[] element = ((STRUCT) elements[i]).getAttributes();
 35           String value = (String)element[0];
 36           log("array(" + i + ").val=" + value);
 37        }
 38     }
 39  }
 40  /
Java created

Нека го наречем:

SQL> CREATE OR REPLACE
  2  PROCEDURE show_java_calling_plsql
  3  AS LANGUAGE JAVA
  4  NAME 'ArrayDemo.getArray()';
  5  /

Procedure created

SQL> EXEC show_java_calling_plsql;

array(0).val=a
array(1).val=b


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MOD() Функция в Oracle

  2. PostgreSQL срещу Oracle:Разлика в разходите, лекотата на използване и функционалността

  3. Java - намерете първата причина за изключение

  4. Как да експортирате данни за полетата на clob в разработчика на oracle sql

  5. Въведение в PL/SQL функциите в Oracle Database