1

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

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;

如何build_cursor从 java 调用该过程?

我读到这个:如何在java中调用包含用户定义类型的oracle存储过程?但我不知道我必须对他的 java 示例进行哪些更改才能创建关联数组;我将当前元素的 Key 放在哪里?

这是来自 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
);
4

1 回答 1

2

只能引用 SQL 对象jdbc,不能引用 PL/SQL 对象。关联数组是 PL/SQL 对象,因此您无法从jdbc.

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

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

于 2012-10-05T08:12:58.990 回答