Oracle Table、Type、Array的建立與使用
阿新 • • 發佈:2019-02-14
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;
輸出結果: