跳至主要內容

Oracle基础总结

Alooc...大约 3 分钟数据库OracleOracle

游标

索引

​ 创建、删除、位图索引、组合索引
​ create index index_name on table_name(table_column)

触发器

​ 语句级触发器
​ 行级触发器
​ 触发器功能:
​ 1.允许/限制对表的修改
​ 2.自动生成派生列,比如自增字段
​ 3.强制数据一致性
​ 4.提供审计和日志记录
​ 5.防止无效的事务处理
​ 6.启用复杂的业务逻辑
​ create or replace trigger tri_name
​ [before | after | instead of] tri_event
​ on table_name | view_name | user_name |db_name
​ [ for each row] [when tri_condition]
​ begin
​ plsql_sentences;
​ end tri_name;

		说明:
			:NEW 修饰符访问操作完成后列的值
			:OLD 修饰符访问操作完成前列的值
	参考文章:https://segmentfault.com/a/1190000021096635

存储过程

​ 定义一个sql方法

plsql是对sql的扩展,可实现复杂的逻辑处理

​ 两种锁定策略:
​ 悲观锁 pessimistic locking 在用户修改数值之前就已经开始生效了。我们在试图更新之前就把行锁住了,因此我们很悲观。
​ 乐观锁 optimistic locking 把所有锁定的动作都延迟到即将执行更新之前才进行。我们会修改屏幕上的信息而不需要先锁住它。
​ 我们很乐观,认为数据不会被其他用户修改。因此会等到最后一刻才去看我们的想法对不对。
​ 虚拟列:
​ 比视图好用,根据其他列的计算生成 virtual_name as (a+b+c)

数据库日志表

​ oracle日志文件:
​ 重做日志文件:
​ 主要记录数据库的操作过程,可以在进行数据库恢复时,将重做日志文件在还原的数据库上进行执行,以达到数据库的最新状态。

	归档日志文件:
		重做日志放满后,将被覆盖的放到归档日志文件中。

批处理

​ 脚本语言

merge into tablename
using table|select...
on ...
update|insert ...

merge into 效率更好

--基础
nvl
decode
to_char
to_date
comment on table das.service_efficiency is '服务效率表';
comment on column das.service_efficiency.se_id is '主键ID';
--主键
insert into das.monitor_summary
  (msu_id)
  (select sys_guid() from dual);	
--时间
select sysdate from dual;
--条件
case
	when to_char(count_time, 'mm') < 7 then
	 to_char(count_time, 'YYYY"上半年"')
	when ... then ...
	when .... then ....
	[else
	 to_char(count_time, 'YYYY"下半年"')]
end 半年
--FM0099.99 格式化数字类型的格式
select to_char(para,'FM990.00') from tablename;
--0表示:如果参数存在数字就希纳是数字,不存在数字就显示0
--9表示:如果参数存在数字就显示数字,不存在数字就显示空格
--FM表示:将9带来的空格删除
select to_char(999,'FM9000.00') from dual;


/*
sql总结
*/
----tns配置

ora3 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.50.23)(PORT = 1521))
    (CONNECT_DATA =
		  (SERVICE_NAME = DEDICATED)
      (SERVICE_NAME = dwks)
    )
  )

----ddl
--创建用户
create user username identified by password;
--创建表空间
create tablespace ts_username_name datafile "I:\dworcl\oradata\dworcl\ts_dw_z1.dbf" size 100M;
--创建表
create table tablename (
				colname  coltype(num) primary key,
				...,
				constraint pk_username_tablename_colname primary key colname,
				constraint fk_username_tablename_colname foreign key colname references reftablename(colname)
				) tablespace spacename;
--创建序列
create sequence username.seqname start with 100 increment by 1 minvalue 100 maxvalue 99999 cache 20 cycle|nocycle;
--创建索引
create index username.idx_name on username.tablename(colname) tablespace ts_name;
--创建临时表
create table username.temp_tablename tablespace spacename
as
select * from tablename;
----dml
--插入
insert into dw.m_order_temp
  (ddbh, brbh, yljgid, cfid, zje, tc, grfd, ddsj)
  select *
    from dw.m_order a
   where exists (select 1
            from dw.m_order_detl b
           where a.ddbh = b.ddbh
             and b.spmbh = '861234568');
--更新
update dw.institution_natl a
   set yljgmc = replace(yljgmc, '意愿', '医院')
 where yljgmc like '%意愿%'
   and exists
 (select 1 from dw.institution_natl b where a.yljgid = b.yljgid);
--删除 
delete from tablename where ...;
----dql
select ... from ... where ... group by ... having ... order by ...;
----dcl
--赋权
grant dba to username;
--收权
revoke dba from username;
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.5