Oracle笔记

本文详细介绍了在Oracle数据库中创建自增ID的序列和触发器方法,以及时间计算规则。同时,阐述了Docker环境下安装Oracle的流程,包括持久化启动和配置步骤,帮助读者深入理解数据库管理和容器技术。
摘要由CSDN通过智能技术生成

创建表的自增ID(通过序列)

 --如何实现主键字段自增
 --第一步
  --创建序列T_PLAN_NEW_NEXTVAL		
 create sequence T_PLAN_NEW_ID
 increment by 1	 				--每次加几个				
 start with 100				 	--从100开始计数					 
 minvalue 1							--设置最小值				
 maxvalue 999999999;		--设置最大值			

 create sequence "序列号名称"
 increment by 1	 				--每次加几个				
 start with 100				 	--从100开始计数					 
 minvalue 1							--设置最小值				
 maxvalue 999999999;		--设置最大值		
	
	--第二步骤
 ----创建触发器 
 --以T_PLAN_NEW表为demo
 create or replace trigger T_PLAN_NEW_ID_nextval
before insert on      T_PLAN_NEW
referencing old as old new as new 
for each row
begin
select   T_PLAN_NEW_ID.nextval into :new.id from dual;
end;


create or replace trigger "触发器名字自起"
before insert on      "表名字"
referencing old as old new as new for each row
begin
select   "序列名".nextval into :new.id from dual;
end;
 
 CREATE TRIGGER "触发器名称" BEFORE  INSERT ON example FOR EACH ROW 
WHEN ( new.id IS NULL ) BEGIN  SELECT
	emp_sequence.nextval INTO : new.id 
	FROM
		dual; 
END; 
 
  
 
 
 =====================下面是笔记
 
 --获取序列自增ID --
 select seq_sys_dict_type.nextval from dual --刷新自增时间
 
 select T_PLAN_NEW_NEXTVAL from dual;
 

select * from dba_sequences where sequence_owner='LGGBWL' and SEQUENCE_NAME = 'T_PLAN_NEW_ID';


 -- 删除序列 -- 
 drop sequence T_PLAN_NEW_ID;  
		
 -- 创建序列  t_plan_new.nextval --
 --方法一												
															  
 --创建序列T_PLAN_NEW_NEXTVAL		
 create sequence T_PLAN_NEW_ID
 increment by 1	 								
 start with 7										
 minvalue 1											
 maxvalue 999999999;						
  
 
----创建触发器 
 create or replace trigger T_PLAN_NEW_ID_nextval
before insert on      T_PLAN_NEW
referencing old as old new as new 
for each row
begin
select   T_PLAN_NEW_ID.nextval into :new.id from dual;
end;


create or replace trigger "触发器名字自起"
before insert on      "表名字"
referencing old as old new as new for each row
begin
select   "序列名".nextval into :new.id from dual;
end;
 
 CREATE TRIGGER "触发器名称" BEFORE  INSERT ON example FOR EACH ROW 
WHEN ( new.id IS NULL ) BEGIN  SELECT
	emp_sequence.nextval INTO : new.id 
	FROM
		dual; 
END; 

 --方法二
  create sequence T_PLAN_NEW_NEXTVAL
	INCREMENT BY 1 -- 每次加几个
	START WITH 1 -- 从1开始计数
	NOMAXVALUE -- 不设置最大值
	NOCYCLE -- 一直累加,不循环
	CACHE 10;
	
 -- 更改序列  T_PLAN_NEW_NEXTVAL--
 alter sequence T_PLAN_NEW_NEXTVAL 
    increment by  1 
    minvalue 7
		maxvalue 999999999; 
		
		----创建触发器
create or replace trigger T_PLAN_NEW_NEXTVAL
before insert on T_PLAN_NEW
for each row
begin
select user_seq.nextval into :new.id from dual;
end;	

create or replace trigger 触发器名字 触发时间 触发事件 
after(before)  insert or update or delete on 表名 for each row 
begin  
  pl/sql 
end
 
 		=====================================语法说明=====================================================================
		=====================================语法说明=====================================================================
--创建序列的语法 --
 create sequence [user.]sequence_name
    [increment by n]
    [start with n]
    [maxvalue n | nomaxvalue]
    [minvalue n | nominvalue];
    
--修改序列的语法--
alter sequence [user.]sequence_name
    [increment by n]
    [maxvalue n | nomaxvalue]
    [minvalue n | nominvalue];
		
		3、序列参数说明

    INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
    START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
    MAXVALUE:指定序列可生成的最大值。
    NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。
    MINVALUE:指定序列的最小值。
    NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。
		
		
		----------创建触发器语法-------
		oracle创建触发器
 create or replace trigger 触发器名字 触发时间 触发事件

after(before)  insert or update or delete on 表名 for each row

begin 

  pl/sql

end 

触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
触发时间:指明触发器何时执行,该值可取:
before:表示在数据库动作之前触发器执行;
after:表示在数据库动作之后触发器执行。
触发事件:指明哪些数据库动作会触发此触发器:
insert:数据库插入会触发此触发器;
update:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。
表 名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。

 
	 

oracle时间计算规则

两个Date类型字段:START_DATE,END_DATE,计算这两个日期的时间差(分别以天,小时,分钟,秒,毫秒):

 select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) ) 天 FROM DUAL;

 select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24  ) 小时 FROM DUAL;
 
 select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 ) 分钟 FROM DUAL;
 
 select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60) 相差秒数 FROM DUAL;
 
 
 select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60 * 1000) 相差毫秒数 FROM DUAL; 
 

Oracle分页

-- 分页demo
select * from (
	select TMP.*,ROWNUM ROW_ID from(	
		你的sql 
	) TMP
	WHERE ROWNUM <= pageSize*pageNo		
)
where ROW_ID > (pageNo-1)*pageSize 	

pageNo:当前的页码   			
pageSize:每页的记录数     

ROW_ID(开始) (pageNo-1) * pageSize  
ROWNUM(结束)		pageNo * pageSize 		

Docker安装Oracle流程

2.拉取阿里云oracle镜像

docker pull registry.aliyuncs.com/helowin/oracle_11g 或者 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

3持久化启动方式:

#docker run  -itd -p 1521:1521 --name oracle --restart=always --mount source=oracle_vol,target=/home/oracle/app/oracle/oradata registry.aliyuncs.com/helowin/oracle_11g


# docker run --privileged --name oracle11g -p 1521:1521 -v /install/database:/install registry.aliyuncs.com/helowin/oracle_11g

docker run -d -p 1521:1521 --privileged --name oracle11g registry.aliyuncs.com/helowin/oracle_11g

4,进行配置
(1)首先执行如下命令进入 oracle 的命令环境中: 
docker exec -it oracle11g bash


(2)接着执行如下命令切换到 oracle 数据库的 root 用户下(密码为:helowin) 
su root

(3)编辑 profile 文件: 
vi /etc/profile


(4)在末尾处添加如下 ORACLE 环境变量参数后保存退出:
注意:作者原先制作这个镜像时,设置的数据库 SID 为 helowin,所以这里的 SID 不做修改(修改了也没用,因为要改变 SID 的话修改多处地方)。
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
export ORACLE_SID=helowin
export PATH=$ORACLE_HOME/bin:$PATH

必须source /etc/profile 否则 环境变量无效
source /etc/profile

(5)接着执行如下命令创建软连接: 
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin

(6)然后执行如下命令切换到 oracle 用户:
注意:一定要写中间的那一横条(-)必须要,否则软连接无效。 
su - oracle


(7)接着依次执行如下命令登录 sqlplus: 
sqlplus /nolog
conn /as sysdba



(8)执行如下命令将 system 和 sys 两个账户的密码设为 123:

alter user system identified by 123;
alter user sys identified by 123;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;


(9)我们还可以执行如下命令解锁 scott 用户,同时将其密码设置为 abc:
SCOTT 是 ORACLE 内部的一个示例用户,下面有 emp、dept 等实例表,这些表和表间的关系演示了关系型数据库的一些基本原理。
alter user scott account unlock;
alter user scott identified by 123;
commit;










============================

create user lsz identified by 123; 
 
grant connect,resource,dba to lsz;
 
#设置密码永不过期
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
 
#关闭
shutdown immediate;
 
#启动数据库
startup; 






create user LSZ identified by 123;
grant connect,resource,dba to LSZ ;



docker run  --restart=always  -d  -p 1521:1521 -v /data/oracle:/data/oracle --name oracle11g  registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g



create user lsz identified by 123456;



grant connect,resource,dba to lsz;




shutdown immediate 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值