在我创建的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我该怎么做?
由于
答案 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
,然后对于每个对象,您可以访问属性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;
使用嵌套表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