1
問題關於PL/SQL集合:PL/SQL集合的限制 - 在比較到Java集合
我生成頻數分佈表中的工資數據爲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;