如何在Java中使用Oracle中的关联数组调用过程

时间:2012-10-04 16:33:20

标签: jdbc oracle10g

我有一个如下所示的存储过程:

TYPE ref_cursor IS REF CURSOR;    
TYPE parametro IS RECORD (
    nombre      VARCHAR2(50), -- I want to remove this value and make it the key of the table instead.
    valor       VARCHAR2(32000),
    tipo        VARCHAR2(1),
    sentencia   VARCHAR2(32000)
);
TYPE parametros IS TABLE OF parametro INDEX BY VARCHAR2(50);

PROCEDURE build_cursor (
    params IN parametros
    results OUT ref_cursor
);

从build_cursor过程中,我希望能够通过其密钥访问表的内容。

parametros('key');

但是,我不知道如何用Java构建关联数组,我只看到了简单数组的例子,即:TYPE parametros IS TABLE OF parametro;

如何从java调用build_cursor过程?

我读到了这个:How to call oracle stored procedure which include user-defined type in java?但我不知道我需要对他的java示例进行哪些更改来创建关联数组; 我在哪里放置当前元素的键?

这是来自Oracle的工作测试。

params('key').nombre        := 'key'; -- I want this to be removed because it's the key.
params('key').valor         := 'Roger';
params('key').tipo          := 'V';
params('key').sentencia     := 'Something';
-- Call the procedure
pk_sql_utils.build_cursor(
    params => params,
    results => :results
);

1 个答案:

答案 0 :(得分:2)

Only SQL objects can be referenced by jdbc, not PL/SQL objects。关联数组是PL / SQL对象,因此您无法从jdbc“看到”它们。

您可以将包装器PL / SQL函数与SQL对象一起使用(关联数组类似于一个嵌套的索引表和一个嵌套的值表)。

您还可以使用临时表:jdbc批量插入临时表,包装程序(或PL / SQL块)读取临时表并调用您的过程。