Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle pl/sql集合限制-与java集合相比_Oracle_Collections_Plsql - Fatal编程技术网

Oracle pl/sql集合限制-与java集合相比

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中实现同样的功能 此外,我大多数时候都受到约束,因为

关于pl/sql集合的问题:

我正在为hr employees表的薪资数据生成频率分布表,如下所示:

  • 我正在创建一个表类型
    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循环