Cursor For循环使用子查询和关联数组?

时间:2014-12-04 09:54:04

标签: sql oracle plsql cursor associative-array

CREATE OR REPLACE PROCEDURE report_credit
(p_email customers.cust_last_name%TYPE,
p_credit_limit customers.credit_limit%TYPE)
IS
  TYPE typ_name IS TABLE OF customers%ROWTYPE
    INDEX BY customers.cust_email%TYPE;
  v_by_cust_email typ_name;
  i VARCHAR2(30);
  PROCEDURE load_arrays IS
  BEGIN
    FOR rec IN (SELECT * FROM customers
                WHERE cust_email IS NOT NULL) LOOP
      v_by_cust_email (rec.cust_email) := rec;
    END LOOP;
END;

v_by_cust_email(rec.cust_email):= rec;

我没有得到那条线的含义,它是什么类型的任务?

1 个答案:

答案 0 :(得分:1)

这是在客户电子邮件地址索引或键入的内存中创建关联数组 - 键,值对。数组的是与customers表中的行结构相同的记录,例如。

v_cust_by_email('joe.bloggs@anisp.com') = customer('Joe', 'Bloggs', 100.00)
v_cust_by_email('john.doe@anotherisp.com') = customer('John', 'Doe', 500.00)
v_cust_by_email('jane.doe@anotherisp.com') = customer('Jane', 'Doe', 250.00)

这将允许您在以后的处理中直接通过电子邮件地址查找此数组中的值,而无需查询数据库表或循环关联数组并将提供的电子邮件地址与数组中的电子邮件地址进行比较。