Merge into应用
Merge into适用于数据量非常大的表,做insert\update动作。比起insert into select效率上要更高些。当然merge into也提供了when matched then的条件规范。
基本语法:
Truncate table
Truncate table与delete * from table作用是一样,都是删除表中全部数据。但Delete是与事务关联的,所以Truncate table会快很多。另外Oracle书上说,truncate 会把 highwatermark 回归至 0 ,当下一次再插入新资料时就会快一些。这个功能有时间可以测试一下。需要注意的是Truncate table不是PL/SQL直接使用,必须使用动态SQL来执行,并且truncate table是无须commit语句的。
begin
execute immediate 'truncate table hek_table';
end;
取不重复的记录行
表结构:table
ID NAME
110 AA
120 AA
125 BB
126 BB
129 CC
取得如下记录:
110 AA
125 BB
129 CC
如果是MySQL实现这个比较简单。因为MySQL Group By支持多字段。
Select ID,NAME from TABLE group by NAME 但Oracle不支持此用法。
可以做到的,目前只有Select NAME,MAX(ID) FROM TABLE GROUP BY NAME EBSOracle
统计EBS表数量及Oracle概念
转到Oracle ERP有段时间了,突然被一个问题问倒。Oracle ERP有多少张表?统计表的数量首先想到数据字典,可是select了半天,发现对一些概念有点乱。特总结如下:
首先,要明白几个Oracle核心概念。这些概念2年前在读《Oracle8i初学者指南》中明白了一些,无耐后来转做JAVA开发,这些东西又还给作者了^_^。
―解释数据库、表空间、数据文件、表、数据的最好办法是想象一个装满东西的柜子。数据库就是柜子,柜中的抽屉是表空间,抽屉中的文件夹是数据文件,文件夹中的纸是表,写在纸上的信息就是数据‖。 这是《Oracle8i初学者指南》关于这些概念的理解。这样理解并没有错,但事实远非如此简单。
1.核心概念:数据库(Scheme)、数据文件、表空间(Tablespace)、表(table)、用户(user)。
1.1数据库是数据文件、控制文件、日志文件等组成的。属于物理文件的范畴。一个Scheme可以多个Tablespace。对于不同的应用,Oracle也推荐创建不同的表空间,以提高性能。例:DBA备份时可以按表空间进行备份。
1.2表空间是逻辑文件的范畴,Scheme是通过Tablespace进行管理的。这也是Oracle与SQL SERVER在设计理念上的最大区别。一个表空间一般只对应一个数据文件,但也可以有多个数据文件。例:给表空间增容。
1.3表也是逻辑文件的范畴。一个表空间可以多张表,一张表一般只能属于一个表空间。当然Oracle也有提供分区表,来实现一张表存放在多个表空间中。
1.4一张表只能属于一个用户。即用户与表是1对多的关系。Oracle是通过synonym来实现不同用户创建的表进行互访的。
1.5一个用户通过配额(Quota)可以拥有多个表空间,但只能有一个默认的表空间。 引申一下数据字典的概念,数据字典就是存放Oracle数据对象的表。一般是通过数据字典视图来查询,有三种视图:user_、all_、dba_。
2.查看全部表的数量
select count(*) from dba_tables -–因为有做过大量的二次开发,所以直接这样得到的数量是不准确的。
3.查看当前用户所有表的数量
select count(*) from all_tables
4.查看当前用户创建表的数量
select count(*) from user_tables
5.ebs11i对应的表空间是APPS_TS_TX_DATA,通过对表空间进行表的统计,算是比较准确的。
select count(*) from dba_tables dt where dt.tablespace_name='APPS_TS_TX_DATA'
得到EBS表的数量为“15997”。