Mega Code Archive

 
Categories / Oracle PLSQL / PL SQL
 

Store pre-defined constants in VARRAY

SQL> SQL> create table ord(   2           order_no               integer   3          ,cust_no                integer   4          ,order_date             date not null   5          ,total_order_price      number(7,2)   6          ,deliver_date           date   7          ,deliver_time           varchar2(7)   8          ,payment_method         varchar2(2)   9          ,emp_no                 number(3,0)  10          ,deliver_name           varchar2(35)  11          ,gift_message           varchar2(100)  12  ); Table created. SQL> SQL> SQL> CREATE OR REPLACE PROCEDURE p_add_orders (v_ord_ctr IN number, v_item_ctr IN number,   2  v_cust_no IN number, v_emp_no IN number)   3  AS   4     v_loop  number := 1;   5     v_type_ctr      number := 1;   6     v_curr_order ord.order_no%TYPE;   7   8     TYPE PayMethods IS VARRAY(10) OF VARCHAR2(2);   9     v_paymethods    PayMethods := PayMethods('VS','CA','VG','AX','CK','MC','DI','CA','CK','VS');  10  11     TYPE Orderdates IS VARRAY(10) OF DATE;  12     v_odates        Orderdates :=  Orderdates(add_months(sysdate, -45),  13                                                     add_months(sysdate, -14),  14                                                     add_months(sysdate, -22),  15                                                     add_months(sysdate, -38),  16                                                     add_months(sysdate, -46),  17                                                     add_months(sysdate, -59),  18                                                     add_months(sysdate, -19),  19                                                     add_months(sysdate, -11),  20                                                     add_months(sysdate, -74),  21                                                     add_months(sysdate, -6));  22  begin  23             WHILE v_loop <= v_ord_ctr LOOP  24                     IF v_type_ctr > 10 THEN  25                        v_type_ctr := 1;  26                     END IF;  27  28                     INSERT INTO ord (ORDER_NO, CUST_NO, ORDER_DATE, TOTAL_ORDER_PRICE, DELIVER_DATE,  29                                      PAYMENT_METHOD, EMP_NO)  30                     VALUES (999, v_cust_no, v_odates(v_type_ctr), 0, v_odates(v_type_ctr) + 10,  31                               v_paymethods(v_type_ctr), v_emp_no );  32  33                     SELECT 11111  34                       INTO v_curr_order  35                       FROM dual ;  36  37                     v_loop := v_loop + 1 ;  38                     v_type_ctr := v_type_ctr + 1 ;  39             END LOOP;  40  end;  41  / Procedure created. SQL> SQL> show error No errors. SQL> SQL> SQL> drop table ord; Table dropped. SQL> SQL> SQL> --