当前位置: 首页 > 面试题库 >

在Java中获取PL / SQL数组返回值

廖琨
2023-03-14
问题内容

在Java中,如何从pl/sql返回数组的函数中获取值。

如果我的pl /
sql函数返回名为的数组myArray,那么在Java中是否可以使用从中获取值myArray到Java对象中callablestatement

谢谢

更新1

我正在调用函数的Java代码,但是却遇到异常

PLS-00306: wrong number or types of arguments in call to 'myfunc'




connection = con.getConnection();
        callablestatement = connection.prepareCall("{call myfunc(?,?,?}");
        callablestatement.setInt(1, param1);
        callablestatement.setInt(2, param2);
        callablestatement.setString(3, param3);
        callablestatement.registerOutParameter(4, Types.ARRAY);
        callablestatement.execute();        
        resultSet = callablestatement.getArray(4).getResultSet();

更新2

private final String PRODECURE_NAME = "{? = call myfunc(?,?,?)}";

connection = con.getConnection();
    callablestatement = connection.prepareCall(PRODECURE_NAME);
    callablestatement.registerOutParameter(1, Types.ARRAY);
    callablestatement.setInt(2, param1);
    callablestatement.setInt(3, param2);
    callablestatement.setString(4, param3);

    callablestatement.execute();

create or replace type dates
       is varray(100) of varchar2(32);

功能

CREATE OR REPLACE function myfunc (    
    p_id    IN number,
    p_c_id     IN number,
    p_co_no     IN number

)
    RETURN dates
AS
    myarray contract_dates;
    par1        VARCHAR2 (32);
    par2        VARCHAR2 (32);

固定更新3

connection = con.getConnection();
        callablestatement = 
                connection.prepareCall("begin ? :=myfunc(?,?,?); end;");
        callablestatement.registerOutParameter(1, OracleTypes.ARRAY, "DATES");
        callablestatement.setInt(2, param1);
        callablestatement.setInt(3, param2);
        callablestatement.setString(4, param3);
        callablestatement.execute();

问题答案:

我没有这样做,ARRAY但应该可以。首先,您必须注册out函数的参数。这样就可以这样。

private final String PRODECURE_NAME = "{? = call <ProcedureName>(?,?,?)}";

Connection con = null;
CallableStatement cs = null;

       try {
            con = DAOFactory.getDatabaseConnection();
            cs = con.prepareCall(PRODECURE_NAME);
            cs.registerOutParameter(1, java.sql.Types.ARRAY);
            cs.setYourType(2, <yourData>);
            cs.setYourType(3, <yourData>);
            cs.setYourType(4, <yourData>);
            cs.execute();
            Array arr = cs.getArray(1);
            if (arr != null) {
               String[] data = (String[]) arr.getArray();
            }
        } 
        catch (SQLException ex) {
            Logger.getLogger(OracleLiekDAO.class.getName()).log(Level.SEVERE, null, ex);
            try {
                con.rollback();
            }
        }
        finally {
            if (con != null) {
                try {
                    con.close();
                } 
                catch (SQLException ex) {
                    Logger.getLogger(OracleLiekDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

试试这个男人,然后给我,问是否做。

编辑:

这些字符 表示您要设置的一个参数(称为参数化)。所以这:

cs.setYourType(2, <yourData>);
cs.setYourType(3, <yourData>);
cs.setYourType(4, <yourData>);

表示您设置了三个参数(?),方法的第一个参数是列索引,第二个是您特定类型的数据。

编辑2:

很抱歉我写了不好的解决方案,已经更新了,所以现在检查代码并尝试一下。



 类似资料:
  • 问题内容: 从PL / SQL到Java来回传递数字和字符串没有问题,但是如何传递 数组 ?我从PL / SQL调用Java-并非如此。 下面是一个按预期工作的示例。如何编写PL / SQL 调用规范 ,以便可以从PL / SQL调用它? 我已经阅读了《发布带有调用规范的Java类》,其中可以看到嵌套表与相对应,但是我无法使其工作。我可能缺少一些琐碎的细节,因为我不是Java程序员。 问题答案:

  • 主要内容:创建Varray类型在本章中,我们将讨论学习PL/SQL中的数组。 PL/SQL编程语言提供了一种称为的数据结构,它可以存储相同类型的元素的固定大小顺序集合。用于存储有序的数据集合,但通常最好将数组视为相同类型变量的集合。 所有是由连续的内存位置组成。最低的地址对应于第一个元素,而最后一个元素的地址最高。参考以下图示 - 数组是集合类型数据的一部分,表示可变大小的数组。 我们将在后面的“PL/SQL集合”这一章中学习

  • 问题内容: 我已经使用过返回一定数量的行。我的代码是这样的: 有没有什么方法可以检查返回的行数?还是我必须自己写? 问题答案: 您可以使用循环而不是循环,以便在执行循环后调用该循环,如下所示: 或自己计算行数:

  • 问题内容: 所以我有一个功能可以检查预订表中有多少取消: 要在SQL中执行他,我使用: 我的结果是: 我的问题是有人可以帮助我在JAVA中调用该函数吗,我尝试过但没有运气。 问题答案: Java提供了这样的目的。 将打印与在pl / sql中相同的内容。根据文档, 创建一个CallableStatement对象以调用数据库存储过程。CallableStatement对象提供了用于设置其IN和OUT

  • 问题内容: 在SQL表中如何乘以从SQL表中获取的数字数组 如下表所示 编码 如何获得货币列仅分隔行并与给定数相乘并存储到数组中返回 问题答案: 假设是一个mySQLi连接。 此代码用于将钱乘以一个数字。 这段代码是将所有资金存储在array中。 希望对您有所帮助。

  • 问题内容: 我在Oracle数据库11g中使用Pl / SQL。 我正在编写一个将select语句作为参数(varchar2)的函数。该函数使用for循环遍历行并将格式应用于特定的列,并输出整个内容。基本上,我需要某种方式来获取列名,以便可以在顶部显示它们。我知道有多种方法可以对表执行此操作,但是由于传入了此查询,因此可能未选择所有列,可能已使用别名等。 有没有一种方法可以从此查询中选择列名? 理