oracle - PL/SQL 中的类映射对象类型?

标签 oracle plsql map key collections

我想在 PL/SQL 中编写一个类似于 map 的对象类型。我的意思是一个键值对列表,其中一个值可以是另一个键值对列表。很简单,或者我是这么想的。这是两个简化的

CREATE OR REPLACE TYPE TKey AS OBJECT
(
    name varchar2(240),
    value_text varchar2(2000),
    value_map TMap
)

CREATE OR REPLACE TYPE TMap AS TABLE OF TKey

也许不是那么简单,因为现在我有一个“先有鸡还是先有蛋”的问题。如果我先把 TKey 放进去,他会提示 TMap 没有定义。如果我先放入 TMap,他会提示 TKey 没有定义。如果我把TKey放进去,把value_map这行去掉,然后加上TMap类型,然后尝试替换TKey类型,他不会允许的。

我倒霉了吗?这样的构造在 PL/SQL 中是不可能的吗?

提前致谢

澄清:
我想要的是一些东西,它可以给我这个:
包含键 a、b 和 c 的映射。 a 的值是 varchar“hello”,b 的值是 varchar“world”,c 的值是另一个映射,键为 x 和 y,x 的值是“what's”和值y 处于“向上”状态。

这就是它在 Java 中的样子:
Map<String, Object> map = new HashMap<String, Object>();
map.set("a", "Hello");
map.set("b", "World");
Map<String, Object> child = new HashMap<String, Object>();
child.set("x", "What's");
child.set("y", "up");
map.set("c", child);

现在我知道像“对象”这样能够存储任何东西是不可能的。我需要的是一个对象,它可以存储与该对象具有相同类型的对象列表。所以基本上,一棵树,是的。

最佳答案

您可以使用关联数组。从 PL/SQL 用户指南:

了解关联数组(Index-By Tables)

关联数组是一组键值对,其中每个键都是唯一的,用于在数组中定位相应的值。键可以是整数或字符串。

第一次使用键分配值会将该键添加到关联数组。使用相同键的后续分配更新相同的条目。选择唯一的 key 很重要。例如,键值可能来自数据库表的主键、数字散列函数或连接字符串以形成唯一的字符串值。

例如,这里是一个关联数组类型和该类型的两个数组的声明,使用字符串作为键:

示例 5-1 声明集合类型

DECLARE TYPEpopulation_type IS TABLE OF NUMBER INDEX BY VARCHAR2(64);
country_population 人口类型;
大洲人口人口类型;
多少号;
其中 VARCHAR2(64);
开始
country_population('格陵兰') := 100000; -- 创建新条目
country_population('冰岛'):= 750000; -- 创建新条目
-- 查找与字符串关联的值
howmany := country_population('格陵兰');
大陆人口('澳大利亚'):= 30000000;
大陆人口('南极洲'):= 1000; -- 创建新条目
大陆人口('南极洲'):= 1001; -- 替换之前的值
-- 返回 'Antarctica',因为它按字母顺序排在第一位。
which := continent_population.FIRST;
-- 返回按字母顺序排在最后的“澳大利亚”。 which := continent_population.LAST;
-- 返回最后一个key对应的值,在此
——以澳大利亚人口为例。
数量:= 大洲人口(大洲人口。最后);
结尾;
/

关于oracle - PL/SQL 中的类映射对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/996386/

相关文章:

Oracle PL/SQL : Loop Over Trigger Columns Dynamically

java - 无法使用 Spring 4 和 Hibernate 4 创建与 Oracle 11g 的连接

oracle - 将大型 JSON 文件存储到 Oracle DB 中

java - java中带有二维键的映射

c++ - 如何使用映射C++中的值获取匹配键

sql - 按年份统计的员 worker 数

oracle - 让用户访问 Oracle 中其他模式的正确方法

sql - 顶点 : Submit without refreshing the page

mysql - 删除sql中的重复项并相应地修改关系表

Scala:为什么 SortedMap 的 mapValues 返回的是 Map 而不是 SortedMap?