将java类型字符串[]映射到oracle类型
有一些java类加载到Oracle数据库(版本11g)和pl/sql函数包装器:将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
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数据类型。 下面是这种方法的一个小例子:
create or replace type tStringArray as table of varchar2(4000);
创建或替换类型tFilesList作为VARCHAR2(2000)的表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'