2018-05-18 0:09 GMT+02:00 Rafael Ponte <[email protected]>:

> Hi,
>
> I'm using Oracle 11g XE and I have this specific package:
>
> create or replace PACKAGE My_Pkg IS
>
>      -- just my specific type
>      TYPE Varchar2_List IS TABLE OF Varchar2(4000);
>
>      -- trying to use my type and Dbms_Sql.Varchar2_Table
>      procedure does_something(p_ora_list Dbms_Sql.Varchar2_Table,
> p_my_list Varchar2_List);
>
> END My_Pkg ;
>
> Notice my package has 2 associative array types: one for Oracle
> Dbms_Sql.Varchar2_table and the other one for my custom type
> (Varchar2_List).
>
> So when I try to generate code via jOOQ generator (v3.10.6) I'm getting
> this class:
>
> public class MyPkg extends PackageImpl {
>
>     /**
>      * @deprecated Unknown data type. Please define an explicit {@link
> org.jooq.Binding} to specify how this type should be handled.
>      * Deprecation can be turned off using <deprecationOnUnknownTypes/> in
> your code generator configuration.
>      */
>     @java.lang.Deprecated
>     public static void does_something(Configuration configuration, Object
> pOraList, Object pMyList) {
>         // ...
>     }
>
> }
>
>
> It seems like jOOQ doesn't know both types, so it's considering them as
> Unknown data types.
>

Yes, in general, in order for those types to be known, you have to include
the SYS schema in the code generator, or at least those parts of the SYS
schema that you want to reference. Unfortunately...


> As far as I know jOOQ supports associative arrays for default SQL types
> (Number, Varchar2 etc) and custom SQL types (create type "Product" as
> Object (...)).
>

This is incorrect. jOOQ 3.10 doesn't support associative arrays yet. The
relevant feature request is here:
https://github.com/jOOQ/jOOQ/issues/5849

Supporting this for Oracle 12c might be feasible relatively easily, as the
JDBC driver (version 12.2) added support for associative arrays. If driver
support isn't available, it might be possible to serialise / deserialise
the arrays using some tricks. In 11g, it will be much harder as fewer
tricks are available.

What you probably had in mind is the fact that jOOQ 3.11 internally uses
DBMS_SQL types to serialise some data in some contexts, e.g. in the newly
added INSERT/UPDATE/DELETE .. RETURNING emulation for multi-row DML
statements, see:
https://blog.jooq.org/2018/05/02/how-to-run-a-bulk-insert-returning-statement-with-oracle-and-jdbc/

But again, this is about jOOQ 3.11 and about Oracle 12c, not 11g.

I hope this helps,
Lukas

-- 
You received this message because you are subscribed to the Google Groups "jOOQ 
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to