0

在甲骨文中我创建了

create type INTERFACE_VALUES as OBJECT (
IVKEY VARCHAR2(32),
IVVALUE VARCHAR2(250)

);

create type T_INTERFACE_VALUES as TABLE OF INTERFACE_VALUES;   

从java端我通过将映射转换为数组将一个映射作为输入传递给存储过程。

我已经创建了一个存储过程来接受这个映射作为输入参数。

PROCEDURE S_MAP_PARAMETERS(   pVALUES IN T_INTERFACE_VALUES   ) AS
 ???

结束 S_MAP_PARAMETERS;

所以我需要在 SQL 中读取 pVALUES 我该怎么做?

谢谢

4

2 回答 2

1

Oracle 中的嵌套表类型不是键值集合。因此,您需要遍历表pValues,然后对于每个可以访问属性的对象IVVALUEIVKEY您可以通过多种方式执行此操作:

1-通过使用该TABLE功能的光标

CURSOR iterate as
SELECT *
  FROM TABLE(pValues)

然后在你的代码中

For Rec in iterate
loop
    --for example
    DBMS_OUTPUT.PUT_LINE(rec.IVVALUE)
end loop;

2-一次循环一个项目,使用嵌套表count函数:

For indx in 1..pValues.COUNT
Loop
 --access it using indx pvalues(indx)
 --for example
 DBMS_OUTPUT.PUT_LINE(pvalues(indx).IVVALUE)

end loop
于 2013-07-23T14:59:11.420 回答
1

在 SQL 中

SELECT ivkey, ivvalue
  FROM TABLE( pValues );

会工作。如果你真的想问如何在 PL/SQL 中访问集合,假设集合是密集的。

FOR i IN 1..pValues.count
LOOP
  dbms_output.put_line( 'Key = ' || pValues(i).ivkey ||
                        ' Value = ' || pValues(i).ivvalue );
END LOOP;

如果您希望缺少集合的某些元素(考虑到您选择 PL/SQL 集合,这似乎很奇怪),那么循环会变得更加复杂,因为您必须调用FIRSTNEXT遍历这些元素。

如果你想创建一个更类似于 Java 中的 Map 的 PL/SQL 构造,你会想要类似的东西

CREATE TYPE map_t
  AS TABLE OF VARCHAR2(250)
      INDEX BY VARCHAR2(32)
于 2013-07-23T14:55:31.987 回答