질문에 대한 PL/SQL 컬렉션을을 비교 한의 :PL/SQL 컬렉션 제한 - 자바 컬렉션
- I : I는 아래의 시간 직원 테이블에 대한 급여 데이터에 대한 도수 분포표를 생성하고 있습니다
저주파수, 고주파수 및 테이블을 작성하는
class_intervals
을 작성하여type emp_recs_tb
에emp_recs
을 포함하는 테이블을 작성하십시오.
이제는 class_intervals
에 삽입하기 위해 위에 생성 된 해당 범위 항목을 class_intervals
에서 가져와야합니다.
어떻게해야합니까?
자바에서는 해시 테이블을 쿼리하여 키를 얻을 수 있기 때문에 삶이 편한 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;