Oracle基础总结
游标
索引
创建、删除、位图索引、组合索引
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;