Oracle 常見模式對象案例

說明:本文爲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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章