说明:本文为Oracle常见模式对象案例指导手册
标签:管理模式对象、删除模式对象、创建模式对象、
用途:用户可以根据本文快速了解相关模式对象的基本用法
温馨提示:如果您发现本文哪里写的有问题或者有更好的写法请留言或私信我进行修改优化
★ 对象类型清单
--index
--procedure
--job
--function
--trigger
--package
--synonym
--sequence
--dblink
--view
--materialized view
--type
--
★ 创建测试环境
create user zzt identified by zzt;
grant dba to zzt;
drop table zzt.tab;
create table zzt.tab(id number primary key,name varchar2(20));
insert into zzt.tab values(1,'HaHa...');
insert into zzt.tab values(2,'HaHa...');
insert into zzt.tab values(3,'HaHa...');
insert into zzt.tab values(4,'HaHa...');
insert into zzt.tab values(5,'HaHa...');
commit;
★ 正文开始
✔ index(索引)
///////////////////////////////////////////////////////////////////
--删除
drop index zzt.ind;
--创建
create index zzt.ind on zzt.tab(id,name);
--查看
select * from dba_indexes;
✔ procedure(存储过程)
///////////////////////////////////////////////////////////////////
--删除存储过程
drop procedure zzt.pro
--创建存储过程
create or replace procedure zzt.pro
is
begin
update zzt.tab set id=id+1;
commit;
end;
/
--执行存储过程
exec zzt.pro;
--验证
select * from zzt.tab;
--查看
select * from user_procedures;
✔ job(执行任务)
///////////////////////////////////////////////////////////////////
① 旧方式JOB
--删除JOB(传统方式)
select * from dba_jobs;
exec dbms_job.remove(21);
--创建JOB(传统方式)(submit模式)
declare
job number;
begin
dbms_job.submit( /*非isubmit 过程不可以实现指定任务号*/
job => job, /*自动生成job_id*/
what => 'zzt.pro;', /*需要执行的存储过程名称或sql语句*/
next_date => sysdate + 3 / (24 * 60), /*初次执行时间-下一个3分钟*/
interval => 'sysdate+ 1/(24*60*60)' /*每隔1秒执行一次*/
/*no_parse =>false/true 该参数只能用在isubmit过程中*/
);
end;
/
--创建JOB(传统方式)(isubmit模式)
declare
job number;
begin
dbms_job.isubmit( /*isubmit 过程可以实现指定任务号*/
job => 999, /*指定任务号生成job_id*/
what => 'zzt.pro;', /*需要执行的存储过程名称或sql语句*/
next_date => sysdate + 3 / (24 * 60), /*初次执行时间-下一个3分钟*/
interval => 'sysdate+ 1/(24*60*60)' /*每隔1秒执行一次*/
/*no_parse =>false/true 该参数只能用在isubmit过程中*/
);
end;
/
② 新方式JOB
--删除JOB(新方法)
select * from user_scheduler_jobs;
exec dbms_scheduler.drop_job('z_n_job01');
--创建JOB(新方法)
begin
dbms_scheduler.create_job(
job_name => 'z_n_job01', /*JOB名称*/
job_type => 'STORED_PROCEDURE', /*JOB类型*/
job_action => 'zzt.pro', /*执行的对象,相当于what*/
start_date => to_date('2018-04-20 00:00:00', 'yyyy-mm-dd hh24:mi:ss'), /*开始时间*/
repeat_interval => 'Freq=Daily;Interval=1;ByHour=23;ByMinute=00', /*频率*//*每天23点*/
end_date => to_date(null), /*终止时间*/
job_class => 'DEFAULT_JOB_CLASS', /*JOB组*/
enabled => true, /*自动激活*/
auto_drop => false, /*自动删除*/
comments => '我的测试JOB' /*备注*/
);
end;
/
--运行
exec dbms_scheduler.run_job( 'z_n_job01');
--停止
exec dbms_scheduler.stop_job('z_n_job01');
exec dbms_scheduler.stop_job(job_name=>'z_n_job01',force=>true);
--禁用
exec dbms_scheduler.disable('z_n_job01');
--验证
select * from zzt.tab;
✔ function(函数)
///////////////////////////////////////////////////////////////////
--删除函数
drop function zzt.fun;
--创建函数
create or replace function zzt.fun(num1 number) return varchar2 is ret varchar2(8);
/* 判断输入值的正负 */
begin
if num1>0 then ret:='正数';
else ret:='负数';
end if;
return(ret);
end ;
/
--调用函数
select zzt.fun(9) from dual;
--查看
select * from user_objects;
select * from dba_source s where s.name='FUN';
✔ trigger(触发器)
///////////////////////////////////////////////////////////////////
--删除
drop trigger zzt.tri;
drop table zzt.tab_tri;
--创建触发器表
create table zzt.tab_tri(rq date,event varchar2(20),yh varchar2(20),sl varchar2(20),db varchar2(20),err varchar2(20));
--创建触发器
create or replace trigger zzt.tri
/* 记录错误登陆的信息 */
after servererror on database
begin
insert into zzt.tab_tri values
(sysdate,
ora_sysevent,
ora_login_user,
ora_instance_num,
ora_database_name,
ora_server_error(1)
);
end;
/
--测试
sqlplus zzt/000
select * from zzt.tab_tri;
--查看
select * from dba_triggers;
✔ package(包)
///////////////////////////////////////////////////////////////////
--删除
drop package body zzt.pkg;
drop package zzt.pkg;
--创建包头
create or replace package zzt.pkg is
function fun(num1 number) return varchar2;
end;
/
--创建包体
create or replace package body zzt.pkg is
function fun(num1 number) return varchar2 is ret varchar2(8);
/* 判断输入值的正负的函数 */
begin
if num1>0 then ret:='正数';
else ret:='负数';
end if;
return(ret);
end ;
end;
/
--调用
select zzt.pkg.fun(9) from dual;
--查看
select * from user_objects;
select * from dba_source s where s.name='PKG';
✔ sequence(序列)
///////////////////////////////////////////////////////////////////
--删除序列
drop sequence zzt.seq;
--创建序列
create sequence zzt.seq
increment by 1
start with 1
nomaxvalue
nocycle
noorder
cache 10;
--查看
select * from dba_sequences;
✔ synonym(同义词)
///////////////////////////////////////////////////////////////////
--删除
drop synonym zzt.syn;
--创建
create or replace synonym zzt.syn for zzt.tab;
create or replace public synonym syn for zzt.tab;
--查看
select * from dba_synonyms;
✔ dblink(数据库链接)
///////////////////////////////////////////////////////////////////
--删除
drop database link zzt.dbl_scott;
--创建
create database link zzt.dbl_scott connect to scott identified by tiger using 'TNS_RAC1';
create database link zzt.dbl_scott connect to scott identified by tiger using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 1.1.1.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = rac1)))';
create public database link zzt.dbl_scott connect to scott identified by tiger using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 1.1.1.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = rac1)))';
--查看
select * from dba_db_links;
✔ view(视图)
///////////////////////////////////////////////////////////////////
--删除
drop view zzt.view01
--创建
create or replace view zzt.view01 as select id,name,sysdate sj from zzt.tab;
--查看
select * from dba_views;
✔ materialized view(物化视图)
///////////////////////////////////////////////////////////////////
① primary key模式
--创建物化视图日志(primary key模式)(FAST必须创建基于主表的视图日志)
drop materialized view log on zzt.tab;
create materialized view log on zzt.tab with primary key including new values;
--创建物化视图(最快模式:on commit)(不能加时间参数)(对主表性能影响较大)
drop materialized view zzt.mview01;
create materialized view zzt.mview01
refresh fast
on commit
with primary key
as select * from zzt.tab;
--创建物化视图(常规模式:on commit)
drop materialized view zzt.mview01;
create materialized view zzt.mview01
refresh fast
on demand
with primary key
start with sysdate next sysdate+1/(24*60*60)
as select * from zzt.tab;
--查验
update zzt.tab set id=id+1;
commit;
select * from zzt.mview01;
--查看
select * from dba_mview_analysis;
② rowid模式
--创建物化视图日志(rowid模式)(FAST必须创建基于主表的视图日志)
drop materialized view log on zzt.tab;
create materialized view log on zzt.tab with rowid;
--创建物化视图(最快模式:on commit)(不能加时间参数)(对主表性能影响较大)
drop materialized view zzt.mview01;
create materialized view zzt.mview01
refresh fast
on commit
with rowid
as select * from zzt.tab;
--创建物化视图(常规模式:on commit)
drop materialized view zzt.mview01;
create materialized view zzt.mview01
refresh fast
on demand
with rowid
start with sysdate next sysdate+1/(24*60*60)
as select * from zzt.tab;
--查验
update zzt.tab set id=id+1;
commit;
select * from zzt.mview01;
--查看
select * from dba_mview_analysis;
✔ type(自定义类型)
///////////////////////////////////////////////////////////////////
--切换用户
conn zzt/zzt
--删除
drop table zzt.tab_typ;
drop type zzt.typ;
--创建
create or replace type zzt.typ as object (a1 number, a2 number);
/
--验证
drop table zzt.tab_typ;
create table zzt.tab_typ (b1 number,b2 zzt.typ);
insert into zzt.tab_typ values (1,zzt.typ(2,3));
commit;
col b1 for 9999
col b2 for a20
select * from zzt.tab_typ;
--查看
select * from dba_types;
select * from dba_dependencies d where d.owner='ZZT' and d.type='TYPE';
✔ 未完待续……
///////////////////////////////////////////////////////////////////
※ 如果您觉得文章写的还不错, 别忘了在文末给作者点个赞哦 ~
over