2014-04-07 2 views
1

질문에 대한 PL/SQL 컬렉션을을 비교 한의 :PL/SQL 컬렉션 제한 - 자바 컬렉션

  1. I : I는 아래의 시간 직원 테이블에 대한 급여 데이터에 대한 도수 분포표를 생성하고 있습니다

    저주파수, 고주파수 및 테이블을 작성하는 class_intervals을 작성하여 type emp_recs_tbemp_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; 

답변

0

당신은 인덱스 32 K 길이까지 해시 문자열을 저장하기에 충분하다

TYPE <your_array> IS TABLE OF <your base type> INDEX BY VARCHAR2(32767); 

를 사용할 수 있습니다. 이 콜렉션을 루프하기 위해서는 마지막 - 마지막 루프가 아닌 첫 번째 루프를 사용해야합니다.