一、新建数据

  1. -- 创建数组对象
  2. create or replace type tables_array as varray(100) of varchar2(32);
  3. -- 测试用存储过程
  4. create or replace procedure test_in_list(
  5. --参数区域
  6. objlist in tables_array,
  7. message out varchar2
  8. ) is
  9. --变量区域
  10. begin
  11. --执行区域
  12. for i in objlist.first .. objlist.last loop
  13. message:=message||objlist(i)||',';
  14. end loop;
  15. commit;
  16. end test_in_list;

二、java代码调用

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;

public class TestProInList {

    // 调用测试用存储过程
    public static void main(String[] args) {
        // 定义需要的变量
        Connection ct = null;
        CallableStatement cs = null;
        ResultSet rs = null;

        try {
            // 加载驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");

            // 得到连接
            ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myora1", "sccot", "tiger");

            // 创建CallableStatement接口
            cs = ct.prepareCall("{call TEST_IN_LIST(?,?)}");

            // 给in?赋值
            ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TABLES_ARRAY", ct);
            List<String> list = new ArrayList<String>() {
                {
                    this.add("abc");
                    this.add("edf");
                    this.add("ghi");
                }
            };
            ARRAY array = new ARRAY(descriptor, ct, list.toArray());
            // 设置入参
            cs.setArray(1, array);
            // 注册出参
            cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);

            // 执行
            cs.execute();

            // 获取返回结果
            String message = cs.getString(2);
            System.out.println(message); //打印结果: abc,edf,ghi,

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (cs != null) {
                    cs.close();
                }
                if (rs != null) {
                    rs.close();
                }
                if (ct != null) {
                    ct.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            cs = null;
            rs = null;
            ct = null;
        }
    }
}

引用

https://blog.csdn.net/weixin_34381687/article/details/86228963