gpt4 book ai didi

java - 从java访问包内定义的类型

转载 作者:行者123 更新时间:2023-11-30 11:39:48 24 4
gpt4 key购买 nike

我在oracle中的程序是定义在一个包下的,它有记录表的in和out参数。我可以使用来自 java 的可调用语句使用 packagename.procname 调用该过程。但是,要访问 out 参数,我需要定义一个 ARRAY 类型的变量。但是oracle中的记录类型和记录表是在包里面定义的。因此,无法使用 ARRAYDESCRIPTOR 从 java 访问这些类型。

过程和类型定义如下:

CREATE OR REPLACE PACKAGE mypackage IS
TYPE TY_Pos IS RECORD
( cust_id VARCHAR2(9)

, balance NUMBER
);

TYPE TY_TBL IS TABLE OF TY_Pos INDEX BY PLS_INTEGER;

PROCEDURE myproc(inTable IN OUT TY_TBL,
count IN NUMBER,
outTable IN OUT TY_TBL
);

CREATE OR REPLACE PACKAGE BODY mypackage AS

PROCEDURE myproc(inTable IN OUT TY_TBL,
count IN NUMBER,
outTable IN OUT TY_TBL
) as
--proc body

为了访问作为记录表的 proc 的 out 变量,我将数组描述符创建为

ArrayDescriptor myDescp = ArrayDescriptor.createDescriptor ("TY_TBL", l_con);   

但由于 TY_TBL 是在包内定义的,因此它会抛出错误。请帮助我如何从我的 java 代码访问这种类型。

最佳答案

TY_TBL 是一种 Pl/SQL 类型,这意味着这种类型对 java 是不可见的。

我建议创建两个 sql 类型:

 Create or Replace SQL_TY_Pos TYPE AS OBJECT (cust_id     VARCHAR2(9), balance NUMBER);
Create or Replace SQL_TY_TBL TYPE IS TABLE OF SQL_TY_Pos INDEX BY PLS_INTEGER;

然后在java中:

ArrayDescriptor myDescp = ArrayDescriptor.createDescriptor ("SQL_TY_TBL", l_con); 

关于java - 从java访问包内定义的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13066206/

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