--新增单个字段 alter table table_A add item_a varchar2(10) default '默认值' not null; --新增多个字段 alter table table_A add(item_a varchar2(10) default '默认值' not null, item_b varchar2(10) default '默认值' not null); --删除字段 alter table table_A drop column item_a; --修改表字段属性 alter table table_A modify item_a varchar2(100); --添加主键 ALTER TABLE table_A ADD CONSTRAINT tb_a_pk PRIMARY KEY(item_a); --添加索引 ALTER TABLE table_A ADD CONSTRAINT tb_a_un UNIQUE(item_b); --删除约束 alter table table_A drop constraint tb_a_pk; --新增索引 Create index idx_tb_a_a on table_A(item_a,item_b); --修改索引 alter index idx_tb_a_a rebuild table_A(item_a); --删除索引 drop index idx_tb_a_a; --重建索引 alter index idx_tb_a_a rebuild online; --删除序列 drop sequence tb_a_sq; --分区拆分(Range类型使用at,List使用Values;全局索引会失效) alter table table_A split partition tb_a_p values('1') into ( partition tb_a_p_1 tablespace system, partition tb_a_p_2 tablespace system); --合并分区(全局索引会失效) alter table table_A merge partitions tb_a_p_1,tb_a_p_2 into partition tb_a_p; --移动分区(全局索引会失效) alter table table_A move partition tb_a_p tablespace system; --truncate分区(全局索引会失效) alter table table_A truncate partition(tb_a_p); --drop分区(全局索引会失效) alter table table_A drop partition tb_a_p;
分类: 数据库
Oracle游标的创建和使用
一.游标简介
Oracle游标是通过关键字CURSOR的来定义一组Oracle查询出来的数据集,类似数组一样,把查询的数据集存储在内存当中,然后通过游标指向其中一条记录,通过循环游标达到循环数据集的目的
Oracle删除重复数据
需求:删除table_name表中的重复数据;判定重复的标准为:item_1,item_2,item_3的值一样,保留最新的一条
BEGIN LOOP --手动开启本次会话的并行 ALTER SESSION ENABLE PARALLEL DML; --删除分组后重复数据中ROWID最小的数据 DELETE /*+ PARALLEL(8) */ FROM TABLE_NAME WHERE ROWID IN( SELECT /*+ PARALLEL(8) */ MIN(ROWID) FROM TABLE_NAME A GROUP BY A.ITEM_1,A.ITEM_2,A.ITEM_3 HAVING COUNT(*)>1 ); COMMIT; --手动关闭本次会话的并行 ALTER SESSION DIABLE PARALLEL DML; --如受影响行数等于0,则结束循环 EXIT WHEN SQL%ROWCOUNT=0; END LOOP; END;
以上逻辑是重复数据中留下ROWID最大的那条,如需要指定留下哪一条可参考如下:留下CREATE_TIME最新的一条
Oracle并行
并行执行是同时开启多个进程/线程来完成同一个任务,并行执行的每一个进程/线程都会消耗额外的硬件资源,所以并行执行的本质就是以额外的硬件资源消耗来换取执行时间的缩短。
1.DDL(建表、建索引等)并行
Oracle创建表分区
1.建表时创建分区
CREATE TABLE TABLE_NAME ( ID VARCHAR2(64) NOT NULL, CREATE_TIME DATE NOT NULL --省略其他字段 ) --根据CREATE_TIME字段按年分区 PARTITION BY RANGE(CREATE_TIME) INTERVAL (NUMTOYMINTERVAL(1,'YEAR')) ( --创建默认分区,定义初始值为当前时间 PARTITION TABLE_NAME_P1 VALUES LESS THAN (TO_DATE('2019-12-04','YYYY-MM-DD')) );
2.相关时间计算函数
OracleSequence的创建和使用
1.介绍
Sequence是数据库系统按照一定的规则自动增加的数字序列,主要用于生成数据库数据记录。这个序列一般作为代理主键(因为不会重复)。
Sequence是数据中一个特殊存放等差数列的表,该表受数据库系统控制,任何时候数据库系统都可以根据当前记录数大小加上步长来获取到该表下一条记录应该是多少,这个表没有实际意义,常常用来做主键用。
Sequence是数据库系统的特性,有的数据库有Sequence,有的没有。比如Oracle、DB2、PostgreSQL数据库有Sequence,MySQL、SQL Server、Sybase等数据库则没有Sequence。
Oracle递归
1.向下递归获取子节点
--根据二级获取下方的四五级节点
select * from table_name where level in('4','5')
start with id='二级节点ID'
connect by prior id=parent_id
--level:节点级别字段
--start with后定义根节点的位置
--connect by prior 本条ID等于下一条数据的parent_id
2.向上递归获取父节点
Oracle中的取余函数
语法:mod(numer1,number2) 同Java中的”numer1%numer2″
numer1:除数 numer2:被除数
Oracle生成随机数
开发过程中,造数是必不可少的阶段,需要造的数据量过大且需要字段值散乱分布,掌握一些数据库的随机数生成规则是很有必要的
1.生成0~1的小数