如何从Oracle中的TYPE读取Collection(Map)类型的值

时间:2013-07-23 14:42:23

标签: java sql oracle

在我创建的oracle中

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

);

create type T_INTERFACE_VALUES as TABLE OF INTERFACE_VALUES;   

从java方面我通过将map转换为Array来传递一个MAP作为存储过程的输入。

我创建了一个One Stored Procedure来接受这个地图作为输入参数。

PROCEDURE S_MAP_PARAMETERS(   pVALUES IN T_INTERFACE_VALUES   ) AS
 ???
     

结束S_MAP_PARAMETERS;

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

由于

2 个答案:

答案 0 :(得分: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集合,这似乎很奇怪),因为你必须调用FIRST和{{ 1}}迭代元素。

如果你想创建一个与你的Map中的Map更相似的PL / SQL结构,你需要像

这样的东西。
NEXT

答案 1 :(得分: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;

使用嵌套表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