Oracle pl/sql集合限制-与java集合相比
关于pl/sql集合的问题: 我正在为hr employees表的薪资数据生成频率分布表,如下所示:Oracle pl/sql集合限制-与java集合相比,oracle,collections,plsql,Oracle,Collections,Plsql,关于pl/sql集合的问题: 我正在为hr employees表的薪资数据生成频率分布表,如下所示: 我正在创建一个表类型class\u interval,其中包含type emp\u recs\u tb的低频、高频和包含emp\u recs的表 现在,为了插入class\u间隔,我必须从class\u间隔获取上面生成的相应范围条目 我该怎么做 在java中,我们有一个哈希表,这里的生活很简单,因为我可以查询哈希表来获取密钥。如何在pl/sql中实现同样的功能 此外,我大多数时候都受到约束,因为
class\u interval
,其中包含type emp\u recs\u tb
的低频、高频和包含emp\u recs
的表class\u间隔
,我必须从class\u间隔
获取上面生成的相应范围条目
我该怎么做
在java中,我们有一个哈希表,这里的生活很简单,因为我可以查询哈希表来获取密钥。如何在pl/sql中实现同样的功能
此外,我大多数时候都受到约束,因为我不能对任何对象使用索引,因为它约束我使用pls\u integer
请加上你的想法
CREATE OR replace PROCEDURE Hr_stat_ci
AS
CURSOR emp_cur IS
SELECT first_name,
salary
FROM employees;
emps emp_cur%ROWTYPE;
min_sal NUMBER(8, 2);
count_sals NUMBER;
max_sal NUMBER(8, 2);
avg_sal NUMBER(8, 2);
sal_range NUMBER(8, 2);
TYPE emp_rec_t IS RECORD (
emp_name employees.first_name%TYPE,
emp_sal employees.salary%TYPE);
emp_record EMP_REC_T;
TYPE emp_recs_tb
IS TABLE OF EMP_REC_T INDEX BY PLS_INTEGER;
TYPE ci_rec_t IS RECORD (
ci_low NUMBER(8, 2),
ci_high NUMBER(10, 2),
employee EMP_REC_T);
class_interval CI_REC_T;
TYPE ci_table_tb
IS TABLE OF CI_REC_T INDEX BY PLS_INTEGER;
class_intervals CI_TABLE_TB;
i NUMBER := 1;
BEGIN
SELECT Min(salary),
Max(salary),
Avg(salary),
Count(salary)
INTO min_sal, max_sal, avg_sal, count_sals
FROM employees;
sal_range := max_sal - min_sal / count_sals;
dbms_output.Put_line('employee details');
FOR i IN 1..count_sals LOOP
class_interval.ci_low := min_sal;
class_interval.ci_high := min_sal + sal_range;
min_sal := class_interval.ci_high;
Class_intervals(i) := class_interval;
END LOOP;
END hr_stat_ci;
你可以用
TYPE <your_array> IS TABLE OF <your base type> INDEX BY VARCHAR2(32767);
类型是VARCHAR2(32767)的索引表;
这足以将长度不超过32K的哈希字符串作为索引保存。要循环此集合,您需要使用first-而不是last-next循环