1. 程式人生 > >Oracle Table、Type、Array的建立與使用

Oracle Table、Type、Array的建立與使用

    Oracle支援Array型別,使得Oracle不用非得使用遊標來遍歷多行記錄,本文演示了一個Object Array的建立,初始化和遍歷取值,動態生成新的Array的方式。

一、建立表

BEGIN  
   DROP TABLE emp;  
EXCEPTION
  WHEN OTHERS THEN  
    IF sqlcode != -0942 THEN RAISE; END IF;  
END;  

CREATE TABLE jnkcde.emp(
       eid NUMBER,
       ename VARCHAR2(32),
       birthday DATE,
       empDay DATE 
);

COMMENT ON TABLE jnkcde.emp IS '僱員表';
COMMENT ON COLUMN jnkcde.emp.eid IS 'ID';
COMMENT ON COLUMN jnkcde.emp.ename IS '僱員姓名';
COMMENT ON COLUMN jnkcde.emp.ename IS '僱員生日';
COMMENT ON COLUMN jnkcde.emp.ename IS '僱傭日期';

--create synonym emp for jnkcde.emp; 

二、建立TYPE

CREATE OR REPLACE TYPE jnkcde.EMP_TYPE FORCE AS OBJECT
(
       eid NUMBER,
       ename VARCHAR2(32),
       birthday DATE,
       empDay DATE 
);

三、建立ARRAY

CREATE OR REPLACE TYPE jnkcde.EMP_ARR AS TABLE OF jnkcde.emp_type;

四、測試ARRAY

DECLARE 
   empArr emp_arr;      -- 僱員陣列
   rowArr emp%ROWTYPE;  -- emp表的行型別
   newArr emp_arr;       -- 新生成的陣列
   tmpObj emp_type;      -- 臨時物件,用來生成新陣列
BEGIN
   empArr := emp_arr(emp_type(1,'傑克爾',to_date('1990-01-02','yyyy-mm-dd'),to_date('2012-06-02','yyyy-mm-dd')),
                     emp_type(2,'傑瑞米',to_date('1980-01-02','yyyy-mm-dd'),to_date('2012-06-03','yyyy-mm-dd')),
                     emp_type(3,'傑三哥',to_date('1985-01-02','yyyy-mm-dd'),to_date('2012-06-04','yyyy-mm-dd')));
   newArr := emp_arr(); -- 初始化,否則呼叫會報錯

   -- 輸出老陣列並生成新陣列
   dbms_output.put_line('empArr:');
   FOR ii IN empArr.first .. empArr.Last LOOP
     dbms_output.put_line(empArr(ii).eid ||' '||empArr(ii).ename||' '||empArr(ii).birthday||' '||empArr(ii).empDay);
     
     -- 建立新的物件
     tmpObj := emp_type(empArr(ii).eid,empArr(ii).ename,empArr(ii).birthday,empArr(ii).empDay);
     newArr.extend();-- 擴充套件
     newArr(newArr.last) := tmpObj;-- 將物件賦值給新陣列
     
   END LOOP; -- end loop
   
   -- 輸出新陣列
   dbms_output.put_line('newArr:');
   FOR ii IN newArr.first .. newArr.last LOOP
     dbms_output.put_line(newArr(ii).eid ||' '||newArr(ii).ename||' '||newArr(ii).birthday||' '||newArr(ii).empDay);
   END LOOP;
         
   rowArr.eid := empArr(empArr.first).eid;
   rowArr.ename := empArr(empArr.first).ename;
   rowArr.birthday := empArr(empArr.first).birthday;
   rowArr.empDay := empArr(empArr.first).empDay;
   
   dbms_output.put_line('rowArr:');
   dbms_output.put_line(rowArr.eid||' '||rowArr.ename||' '||rowArr.birthday||' '||rowArr.empDay);
   
END;

輸出結果: