【发布时间】:2014-05-19 21:29:53
【问题描述】:
关于 pl/sql 集合的问题:
我正在为hr员工表生成工资数据的频率分布表,如下所示:
- 我正在创建一个表类型
class_intervals,它包含低频、高频和包含emp_recs的表,用于type emp_recs_tb。
现在要插入class_intervals,我必须从class_intervals 获取上面生成的相应范围条目。
我该怎么做?
在 java 中,我们有 HashTable,因为我可以查询哈希表以获取密钥。我应该如何在 pl/sql 中实现同样的效果。
而且我大部分时间都受到限制,因为我不能将index of 用于任何对象,因为它限制了我的 pls_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;
【问题讨论】:
标签: oracle collections plsql