2014-12-04 45 views
0
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;遊標For循環使用子查詢和關聯數組?

我沒有得到該行的含義,它是什麼樣的分配?

+0

這意味着:將變量'rec'的值(內容)賦值給數組'v_by_cust_email'(它必須是相同的結構)中的一行。 – 2014-12-04 10:52:25

+0

謝謝@TonyAndrews – 2014-12-04 12:06:36

回答

1

這是創建一個關聯數組 - 一個密鑰,值對 - 在由客戶電子郵件地址索引或鍵入的內存中。數組的是與客戶表中的行相同結構的記錄,例如,

v_cust_by_email('[email protected]') = customer('Joe', 'Bloggs', 100.00) 
v_cust_by_email('[email protected]') = customer('John', 'Doe', 500.00) 
v_cust_by_email('[email protected]') = customer('Jane', 'Doe', 250.00) 

這將允許你然後這個陣列中直接通過在稍後的處理的電子郵件地址的查找值,沒有任何查詢數據庫表或通過關聯數組循環並與陣列中的進行比較的提供的電子郵件地址。