在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,我该怎么做?
感谢
pValues
,然后对于每个可以访问属性IVVALUE
和IVKEY
的对象,可以通过多种方式进行访问:
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集合,这似乎很奇怪),那么循环会变得有点复杂,因为您必须调用FIRST
和NEXT
来迭代这些元素。
如果你想创建一个与Java中的Map更相似的PL/SQL结构,你会想要类似的东西
CREATE TYPE map_t
AS TABLE OF VARCHAR2(250)
INDEX BY VARCHAR2(32)