gpt4 book ai didi

java - 将 java 类型 string[] 映射到 oracle 类型

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:08 28 4
gpt4 key购买 nike

有一些 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 dstatape 匹配。那是错误的。如果您必须将输入/输出参数作为字符串/数字/日期数组,您应该使用 oracle.sql.ARRAY 数据类型。这是这种方法的一个小例子:

  1. 创建 oracle 数据类型:

    创建或替换 TYPE tFilesList AS TABLE OF VARCHAR2(2000);

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

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

import java.io.File;    
import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.*;

public class DirInfo {

public static oracle.sql.ARRAY getFilesList (String dirName) throws java.sql.SQLException {

Connection orclConnection = new OracleDriver().defaultConnection();

ArrayDescriptor arrayDesc = ArrayDescriptor.createDescriptor ("TFILESLIST", orclConnection);

File filesDir = new File (dirName);

String[] filesList = filesDir.list();

ARRAY dirArray = new ARRAY(arrayDesc, orclConnection, filesList);

return dirArray;
}
}
  1. 创建 pl/sql 函数包装器:

    创建或替换函数 getDirList (dirName in varchar2)
    返回 tFilesList
    作为
    语言 java name 'DirInfo.getFilesList(java.lang.String) return
    oracle.sql.ARRAY';

  2. 测试:

 declare    
myDdir tFilesList;
begin
myDdir := getDirList ('C:\Program Files');
for i in 1..myDdir.COUNT
loop
dbms_output.put_line(myDdir(i));
end loop;
end;

关于java - 将 java 类型 string[] 映射到 oracle 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27661657/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com