Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment mapper TYPE TABLE OF VARCHAR2(5) en Java?

J'ai pu mapper une table de types de varchar2 à java comme suit :

  1. Créez un nouveau type en dehors de tout package PLSQL et accordez les autorisations nécessaires.

     CREATE OR REPLACE TYPE STRARRAY AS TABLE OF VARCHAR2 (100);
     /
     GRANT all ON MYSCHEMA.STRARRAY TO MYUSER1;
     /
     commit;
    
  2. Créez une fonction PLSQL qui accepte/renvoie le strarray. Cela a été déclaré dans la spécification du package et écrit en entier dans le corps du package. Bien que j'aie déclaré que le tableau était IN OUT, dans mon implémentation, je n'utilise en réalité que la sortie de l'appel 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. Appelez la procédure en java. Dans cet exemple, la variable conn est du type de données Connection et a déjà été initialisée. J'exécute un client léger jdbc sur une base de données 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();
    }