oracle 臨時表和內存表


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;

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com