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;