Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como mapear TYPE TABLE OF VARCHAR2(5) em java?


Consegui mapear uma tabela de tipos de varchar2 para java da seguinte forma:

  1. Crie um novo tipo fora de qualquer pacote PLSQL e conceda as permissões necessárias.
     CREATE OR REPLACE TYPE STRARRAY AS TABLE OF VARCHAR2 (100);
     /
     GRANT all ON MYSCHEMA.STRARRAY TO MYUSER1;
     /
     commit;
    

  2. Crie uma função PLSQL que aceite/retorne o strarray. Isso foi declarado na especificação do pacote e escrito por completo no corpo do pacote. Embora eu tenha declarado o array como IN OUT, na minha implementação eu uso apenas a saída da chamada PLSQL.
    PROCEDURE getArr(arr_var IN OUT strarray) IS
      counter NUMBER := 1;
    BEGIN
      arr_var := new strarray();
      WHILE counter <= 10 LOOP
        arr_var.extend();
        arr_var(counter) := 'my data string';
      END LOOP;
    END getArr;
    

  3. Chame o procedimento em java. Neste exemplo a variável conn é do tipo de dados Connection e já foi inicializada. Estou executando um thin client jdbc em um banco de dados Oracle.
    CallableStatement proc = null;
    String sql = "{ call myPackage.getArr(?) }";
    try{
      proc = conn.prepareCall(sql);
      proc.registerOutParameter(1, OracleTypes.Array, "MYSCHEMA.STRARRAY");
      proc.execute();
      Array arrOut = proc.getArray(1);
      for (int num=0; num<10; num++){
         System.out.println(arrOut[num]);
    }finally{
      proc.close();
    }