当前位置: 首页 > 面试题库 >

PL / SQL数据结构,例如Hashmap

太叔景曜
2023-03-14
问题内容

在Oracle pl / sql中,有没有一种方法可以创建像java Hashmap这样的数据结构,它可以将记录类型作为值,将String作为索引。

例如;

 type emp_rec_type is record (emp_id number,emp_salary number);
 emp_rec emp_rec_type;

 type emp_assoc_array is table of emp_rec_type indexed by varchar2(30);
 emp_map emp_assoc_array;

我希望能够做到以下几点

emp_rec.emp_id := 1;
   emp_rec.salary := 1000; 
   emp_map('Rohan') := emp_rec;

能做到吗?我不能使用嵌套表,因为我只能按整数对其进行索引。对于关联数组,我不能将对象类型用作属性。

也希望这样做而不必创建对象或架构数据类型。你能建议点什么吗?


问题答案:

在PL /
SQL中,您可以定义索引的关联数组VARCHAR2(因为我认为10g):

SQL> DECLARE
  2     TYPE map_varchar IS TABLE OF VARCHAR2(30) INDEX BY VARCHAR2(30);
  3     l map_varchar;
  4  BEGIN
  5     l('A') := 'alpha';
  6     l('B') := 'beta';
  7     dbms_output.put_line(l('A'));
  8  END;
  9  /

alpha

在内部,我认为该结构更像是二叉树映射而不是哈希映射。

当然,您可以存储PL / SQL记录或SQL对象:

SQL> DECLARE
  2     TYPE emp_rec_type IS RECORD (emp_id NUMBER,emp_salary NUMBER);
  3     TYPE map_varchar IS TABLE OF emp_rec_type INDEX BY VARCHAR2(30);
  4     l_emp emp_rec_type;
  5     l_map map_varchar;
  6  BEGIN
  7     l_emp.emp_id := 1;
  8     l_emp.emp_salary := 1000;
  9     l_map('A') := l_emp;
 10     -- you can also affect record values directly
 11     l_map('B').emp_id := 2;
 12     l_map('B').emp_salary := 2000;
 13     dbms_output.put_line(l_map('A').emp_salary);
 14  END;
 15  /

1000

PL/SQL procedure successfully completed


 类似资料:
  • 主要内容:PL/SQL标量数据类型和子类型,PL/SQL数值数据类型和子类型,PL/SQL字符数据类型和子类型,PL/SQL布尔数据类型,PL/SQL日期时间和间隔类型,PL/SQL大对象(LOB)数据类型,PL/SQL用户定义的子类型,PL/SQL中的NULL在本章中,我们将讨论和学习PL/SQL中的数据类型。 PL/SQL变量,常量和参数必须具有有效的数据类型,它指定存储格式,约束和有效的值范围。本节将重点介绍和数据类型。其他两个数据类型(复合类型和引用类型)将在后面的章节中介绍。 标量(S

  • 主要内容:1. 创建函数,2. 调用函数,3. PL/SQL递归函数在本章中,我们将讨论和学习PL/SQL中的函数。函数与过程(也叫程序)相同,只不过函数有返回一个值,而过程没有返回值。 因此,上一章中所有有关存储过程的内容也适用于函数。 1. 创建函数 使用语句创建独立函数。语句的简化语法如下: 其中, function-name是指定要创建的函数的名称。 [OR REPLACE]选项指示是否允许修改现有的函数。 可选参数列表包含参数的名称,模式和类型。 表示将

  • 主要内容:创建Varray类型在本章中,我们将讨论学习PL/SQL中的数组。 PL/SQL编程语言提供了一种称为的数据结构,它可以存储相同类型的元素的固定大小顺序集合。用于存储有序的数据集合,但通常最好将数组视为相同类型变量的集合。 所有是由连续的内存位置组成。最低的地址对应于第一个元素,而最后一个元素的地址最高。参考以下图示 - 数组是集合类型数据的一部分,表示可变大小的数组。 我们将在后面的“PL/SQL集合”这一章中学习

  • 问题内容: 我想创建一个SQL脚本,可以重新创建我已经拥有的数据库。我想重新创建内部没有数据的数据库。 那么sqlplus是否可以导出用户的数据库? 问题答案: 有两种基本方法。 首先是导出转储文件。可以使用Datapump实用程序: 了解更多。 Datapump是在Oracle10g中引入的。在数据库的早期版本中,我们可以使用EXP实用程序执行相同的操作。 要导入文件,我们使用匹配(或)实用程序

  • 顺序结构 顺序栈(Sequence Stack) SqStack.cpp 顺序栈数据结构和图片 typedef struct { ElemType *elem; int top; int size; int increment; } SqStack; 队列(Sequence Queue) 队列数据结构 typedef struct { ElemType * elem; int fron

  • 数据结构 Collection 和 Sequence Clojure 常用的数据结构有 List, Map, Vector, Set. 他们都属于 Collection, 之间的关系大致是这样: 属于 Clojure 当中实现的数据结构都是 Collection. 编码当中会遇到 Host 平台的数据类型, 不属于 Collection. 实现了 Collection 的接口的数据结构都支持这些函