1.往臨時表中插入數據
insert into TEMP_TABLE_LINE select *from table(func_exbprod_line(Fr_Time,To_Time)); insert into TEMP_TABLE_LINE select *from table(func_exbprod_line_v(Fr_Time,To_Time));
其中臨時表為:TEMP_TABLE_PROD_LINE ;
2.創建臨時表(事務級別的)
-- Create table create global temporary table TEMP_TABLE_PROD_LINE ( contractno VARCHAR2(50), contractselfno VARCHAR2(50), pricetype VARCHAR2(50), workshop VARCHAR2(50), materiel VARCHAR2(50), price NUMBER(16,2), quantity INTEGER, discount NUMBER ) on commit delete rows;
3.自定義類型
CREATE OR REPLACE TYPE TYPE_XXESB_PROD_LINE_OP_V AS OBJECT ( -- AUTHOR : OP.49369 -- CREATED : 2017/10/23 星期一 11:43:21 -- PURPOSE : -- ATTRIBUTES CONTRACTNO VARCHAR2(50),--系統合同號 CONTRACTSELFNO VARCHAR2(50),--合同自編號 PRICETYPE VARCHAR2(50),--價格類別 WORKSHOP VARCHAR2(50),--車間 MATERIEL VARCHAR2(50),--物料 PRICE NUMBER(16,2),--價格 QUANTITY INTEGER,--數量 DISCOUNT NUMBER--加盟商折算系數 )NOT FINAL;
4.內存表
CREATE OR REPLACE TYPE TEMP_XXESB_PROD_LINE_TABLE IS TABLE OF TYPE_XXESB_PROD_LINE_OP_V;
向內存表中寫數據 參考http://www.itpub.net/forum.php?mod=viewthread&tid=1707128
-- Created : 8/16/2012 3:00:03 PM -- Purpose : 內存表使用 --1.建立表類型 CREATE OR REPLACE TYPE ty_obj IS OBJECT ( p_empno VARCHAR2 (50) , p_ename VARCHAR2 (50) , job VARCHAR2 (50) ); --2.建立數組 CREATE OR REPLACE TYPE ty_objtab IS TABLE OF ty_obj; --3.建立函數 CREATE OR REPLACE FUNCTION func_info RETURN ty_objtab IS v_ty_objtab ty_objtab := ty_objtab(); --返回內存表 BEGIN FOR cur IN (SELECT * FROM emp) LOOP v_ty_objtab.extend; v_ty_objtab(v_ty_objtab.count) := ty_obj(cur.empno,cur.ename,cur.job); END LOOP; RETURN v_ty_objtab; END func_info; --4.測試1 --查詢出所有結果 SELECT * FROM TABLE(func_info); --查詢出部分結果 DECLARE vtab ty_objtab; BEGIN vtab := func_info; dbms_output.put_line(vtab(1).p_empno); END; --查詢結果行數 DECLARE vtab ty_objtab; BEGIN vtab := func_info; dbms_output.put_line(vtab.count); END; --綜合操作 DECLARE vtab ty_objtab; BEGIN vtab := func_info; FOR i IN 1..vtab.count LOOP --修改內存表中數據 vtab(i).p_ename := vtab(i).p_ename || 'mm'; --讀取內存表中數據 dbms_output.put_line(vtab(i).p_ename); --測試表明 操作成功 END LOOP; END;
