Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Oracle 12c执行存储过程时给出空结果_Java_Oracle - Fatal编程技术网

Java Oracle 12c执行存储过程时给出空结果

Java Oracle 12c执行存储过程时给出空结果,java,oracle,Java,Oracle,我正在尝试使用java代码执行存储过程。我使用的是OJDBC7和JDK1.8 我有两个数据相同但版本不同的数据库。一个使用Oracle 10g,另一个使用Oracle 12c Plsql执行成功,我在Oracle10g和Oracle12c中都看到了获取的数据 我的Java代码适用于Oracle 10g版本。但在Oracle12c版本中,我得到的结果是空的 declare OFFERLIST_ID_TY OFFERLIST_ID_TYPES; OFFERLIST_ID_T OFFERLIST_

我正在尝试使用java代码执行存储过程。我使用的是OJDBC7和JDK1.8

我有两个数据相同但版本不同的数据库。一个使用Oracle 10g,另一个使用Oracle 12c

Plsql执行成功,我在Oracle10g和Oracle12c中都看到了获取的数据

我的Java代码适用于Oracle 10g版本。但在Oracle12c版本中,我得到的结果是空的

declare
 OFFERLIST_ID_TY OFFERLIST_ID_TYPES;
 OFFERLIST_ID_T OFFERLIST_ID_TYPE;
 OFFERS_INFO_TY OFFERS_INFO_TYPE;

begin

OFFERLIST_ID_T:=OFFERLIST_ID_TYPE('1234','MM');
OFFERLIST_ID_TY:=OFFERLIST_ID_TYPES(OFFERLIST_ID_T);


OFFERS(OFFERLIST_ID_TY,OFFERS_INFO_TY);

FOR i IN OFFERS_INFO_TY.FIRST..OFFERS_INFO_TY.LAST  LOOP
       DBMS_OUTPUT.PUT_LINE('Name: '|| OFFERS_INFO_TY(i).SERVICE_NAME);
    END LOOP;

    END;
Java类

public static void main(String[] args) {
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");

        Connection connection  = DriverManager.getConnection("jdbc:oracle:thin:@db:1521:sid", "user",
                "pwd");
        ArrayList<Struct> OFFERListIdType = new ArrayList<Struct>();
        OFFERListIdType.add(
                ((OracleConnection) connection).createStruct("OFFERLIST_ID_TYPE", new String[] { "1234", "MM" }));

        Array array_of_records = ((OracleConnection) connection).createARRAY("OFFERLIST_ID_TYPES",
                OFFERListIdType.toArray(new Struct[] {}));

        CallableStatement stmt = connection
                .prepareCall("{ call OFFERS(?,?) }");

        stmt.setArray(1, array_of_records);
        stmt.registerOutParameter(2, oracle.jdbc.OracleTypes.ARRAY, "OFFERS_INFO_TYPE");

        stmt.execute();

        System.out.println("Executed");
        Object[] data = (Object[]) ((Array) stmt.getObject(2)).getArray();
        System.out.println("Size:" + data.length);

        stmt.close();
        connection.close();

    } catch (SQLException | ClassNotFoundException e) {
    System.out.println("Connection Failed! Check output console");
    e.printStackTrace();
    return;
}
}
publicstaticvoidmain(字符串[]args){
试一试{
类forName(“oracle.jdbc.driver.OracleDriver”);
Connection Connection=DriverManager.getConnection(“jdbc:oracle:thin:@db:1521:sid”,“user”,
“pwd”);
ArrayList offerListType=新的ArrayList();
OfferListType.add(
createStruct(“OFFERLIST_ID_TYPE”,新字符串[]{“1234”,“MM”});
Array Array of_records=((OracleConnection)connection).createARRAY(“OFFERLIST_ID_类型”,
toArray(新结构[]{});
CallableStatement stmt=连接
.prepareCall(“{call OFFERS(?,)}”);
stmt.setArray(1,数组\u的\u记录);
stmt.registerOutParameter(2,oracle.jdbc.OracleTypes.ARRAY,“提供信息类型”);
stmt.execute();
系统输出打印项次(“已执行”);
对象[]数据=(对象[])((数组)stmt.getObject(2)).getArray();
System.out.println(“大小:“+数据长度”);
stmt.close();
connection.close();
}catch(SQLException | ClassNotFoundException e){
System.out.println(“连接失败!检查输出控制台”);
e、 printStackTrace();
返回;
}
}
输出
System.out.println(“大小:+data.length”)

为空,但相同的过程为数据库中的数据提供oracle 10g中的相同数据

有人能帮忙吗

这是一个开发数据库。对于共享公共代码库的开发人员,有许多模式

“有许多Schemas共享公共代码库”

您可能遇到了Bug 21068213或其变体。12cR1中似乎存在一些问题,例如一个模式中的对象与另一个模式中的相同对象相混淆。也许这是多租户代码中的漏洞


无论如何,这个bug有一个补丁。因此,有必要联系Oracle支持部门(假设您有合同),看看这个bug是否是导致您出现问题的原因。当然要让你的DBA参与进来

我假设您的12c实例中的数据已提交-您并没有将其插入正在测试调用的客户机/会话中,而是没有提交以使其在Java会话中可见?@AlexPoole。谢谢你的帮助。请详细说明一下。如何将oracle 12c设置为对Java会话可见?您是否刚刚插入了希望看到的数据?如果是这样,您是否发布了
commit
?@AlexPoole。我已经插入了数据。但是看不见。没有发出提交。我还没有发布oracle 10G中的commit。这是一个开发数据库吗?谢谢。如果有关于这个bug和补丁的参考,你能帮助我吗?我已经提供了bug编号。您应该能够通过MyOracleSupport门户找到它。