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;

 

转载于:https://www.cnblogs.com/rdscfh/p/7743871.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库中的临时空间(Temporary Tablespace)主要用于存储SQL语句执行过程中生成的临时结果集和排序中间结果。它在数据库运行过程中起到了重要的作用。 Oracle数据库中的临时空间使用历史可以追溯到早期版本的Oracle数据库。在Oracle 7中,临时空间的引入就大大提高了数据库的性能和可伸缩性。在早期版本的Oracle数据库中,排序和临时结果集的存储通常是通过使用数据库内部的排序区(Sort Area)和排序段(Sort Segment)来完成的,这种方式对内存的需求较大,并且容易导致性能瓶颈。为了解决这个问题,Oracle引入了临时空间的概念。 临时空间的引入提供了一种从磁盘读取和写入排序结果的方法,从而减轻了内存的压力,并改善了排序操作的性能。临时空间可以由系统管理员在数据库中手动创建,或者可以由自动管理的空间管理(Automatic Storage Management)来创建和管理。 临时空间的使用方式通常是在SQL语句执行之前,临时空间会被分配给用户会话。当SQL语句执行期间需要排序或者产生临时结果集时,数据被写入临时空间。一旦排序或者查询结束,临时空间会被释放,以便其他会话使用。 临时空间的大小通常需要根据系统的负载和需求来决定,过小的临时空间可能导致临时空间不足的错误,而过大的临时空间则会占用过多的磁盘空间。因此,管理者需要根据实际情况来调整临时空间的大小。 总之,Oracle数据库中的临时空间在SQL语句的执行过程中起到了重要的作用,它提供了一种存储临时结果集和排序结果的方法,并提升了数据库的性能和可伸缩性。通过合理地设置临时空间的大小和管理,可以确保数据库的高效运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值