如何从Oracle中的TYPE中读取集合(映射)类型的值



在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作为输入传递给存储过程。

我创建了一个one存储过程,用于接受此映射作为输入参数。

PROCEDURE S_MAP_PARAMETERS(   pVALUES IN T_INTERFACE_VALUES   ) AS
 ???

END S_MAP_PARAMETERS;

所以我需要阅读SQL中的pVALUES,我该怎么做?

感谢

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

在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)

最新更新