将java类型字符串[]映射到oracle类型

将java类型字符串[]映射到oracle类型,java,oracle,type-conversion,Java,Oracle,Type Conversion,有一些java类加载到Oracle数据库(版本11g)和pl/sql函数包装器: create or replace function getDataFromJava( in_uListOfSms in tStringArray ) return tStringArray as language java name 'JavaClass.getSms( java.lang.String[]) return java.lang.String[]'; 从示例中可以看到,我尝试将j

有一些java类加载到Oracle数据库(版本11g)和pl/sql函数包装器:

create or replace function getDataFromJava( in_uListOfSms  in tStringArray )
return tStringArray    
as language java name 'JavaClass.getSms( java.lang.String[]) return java.lang.String[]';    
从示例中可以看到,我尝试将java数据类型“java.lang.String[]”与Oracle数据类型匹配:

create or replace type tStringArray as table of varchar2(4000);
然后当我运行此代码时:

declare
  in_array  tStringArray := tStringArray();    
  out_array tStringArray := tStringArray();    
begin    

  in_array.EXTEND;    
  in_array(1) := '1';    
  in_array.EXTEND;    
  in_array(2) := '2';    
  in_array.EXTEND;    
  in_array(3) := '3';    

    out_array := getDataFromJava( in_array );    

      for i in 1..3    
      loop    
        dbms_output.put_line(out_array(i));    
      end loop;    
end;    
因此,我得到一个错误:

ORA-00932: inconsistent datatypes expected a java type at argument position 2 to which some Oracle value can be converted got something else   

好吧,我已经做到了!我的方法中的关键错误是给人的印象是java数据类型String[]应该与基于“varchar2表”的oracle数据类型相匹配。那是错误的。如果必须将输入/输出参数作为字符串/数字/日期数组,则应使用oracle.sql.array数据类型。 下面是这种方法的一个小例子:

  • 创建oracle数据类型:

    create or replace type tStringArray as table of varchar2(4000);
    
    创建或替换类型tFilesList作为VARCHAR2(2000)的表

  • 创建返回oracle.sql.ARRAY的方法:

    创建或替换并编译名为“DirInfo”的java源代码

  • 创建pl/sql函数包装器:

    create or replace function getDataFromJava( in_uListOfSms  in tStringArray )
    return tStringArray    
    as language java name 'JavaClass.getSms( java.lang.String[]) return java.lang.String[]';    
    
    创建或替换函数getDirList(varchar2中的dirName)
    返回tFilesList
    as
    语言java名称'DirInfo.getFilesList(java.lang.String)返回值
    oracle.sql.ARRAY'

  • 测试:

  • 我想你在看这个