Oracle學習筆記20150917觸發器

2021-07-05 08:52:29 字數 3807 閱讀 8224

虛表是乙個快照,檢視與自查詢都屬於虛表.

觸發器如果在同一張表上可以replace,如果不在同一張表則不能replace

在oracle中dml語句需要手動提交,ddl語句自動提交

觸發器預設的是語句級觸發器,就是每個語句觸發一次觸發器,二加上for each now後變為行級觸發器,就是對語句涉及到的每一行都觸發一次觸發器.

1.檢視是oracle的一種資料物件,能簡化操作,提高安全性,滿足不同使用者的需求,檢視不是真正存在的物理表.它是根據別的表生成乙個動態的檢視.

建立檢視基本語法create view 檢視名字 as select 語句 [with read only]

例子:create view empview as select empno,ename,job from emp;

2.檢視可以像表一樣被查詢.

3.建立檢視後面可以附加with read only條件設定檢視唯讀.如果檢視不設定唯讀那麼可以對檢視進行修改,即修改了原表.

4.建立乙個橫跨兩張表的檢視以簡化多表查詢操作create viwe myviwe as select  emp.ename,dept.deptno,dept.dname from emp,dept where emp.deptno=dept.deptno with read only;

5.建立修改檢視 create or replace view 試圖名 as select語句(可多表)  刪除檢視drop 檢視名稱;

6.檢視不能新增索引,不占用磁碟空間.不同的使用者查詢不同的檢視有利於提高安全性.

7.觸發器是指某一事件發生時自動觸發的隱含執行的動作.(比如當使用者登入時自動記錄時間與ip的操作)

8.觸發器分為dml(data manipulation language資料操作語言)觸發器與ddl(data definition language資料定義語言)觸發器和系統觸發器(與系統相關的觸發器,比如使用者登入退出啟動關閉資料庫)

9.建立觸發器的基本語法

create trigger trigger_name

實際例子在scott.emp表上新增記錄時提示新增了一條.()

create or replace trigger tril

after insert on

scott.emp

begin

dbms_output.put_line('新增了一條');

end;

10.create or replace trigger tril2

after update on

scott.emp

for each row (表示這是乙個行級觸發器)

begin

dbms_output.put_line('修改了一條資料');

end;

行級觸發器每修改幾個記錄就提示幾次,而語句級觸發器修改多個記錄也只提示一次.

11.可以利用before建立觸發器實現資料安全,例如:

create or replace trigger tril3

before delete on 

scott.emp

begin

if to_char(sysdate,'day') in ('星期日','星期六') then

dbms_output.put_line('休息日不可以刪除員工');

end if;

end;

12.在增刪改查前列印相應提示

create or replace trigger tri3

before

insert or update or delete on

scott.emp

begin

case

when insert then  dbms_output.put_line('請不要新增');

when update then  dbms_output.put_line('請不要更新');

when delete then  dbms_output.put_line('請不要刪除');

13.實現乙個新工資不能低於舊工資的觸發器

create  or replace trigger tri4

before update on

scott.emp

for each row

begin

if  :new.sal<:old.sal then dbms_output.put_line('工資不能低於原來的工資');

else

dbms_output.put_line('原來的工資是'||:old.sal||'現在的工資'||:new.sal);

end if;

end;

14.關於相關操作:new與:old的有效性

特性insert updatedelete

oldnull 有效有效

new有效 有效null

15.add_months(:new.birthday,18*12)>sysdate(這個條件是指birthday加上18歲要大於當前系統時間)

16.系統觸發器常用的五種事件(系統級觸發器往往由dba賬戶建立)

ora_client_ip_address返回客戶端ip

ora_database_name返回資料庫名

ora_login_user返回登入使用者名稱

ora_sysevent返回觸發觸發器的系統事件名

ora_des_encrypted_password返回使用者des(md5)加密後的密碼

基本語法為

crate or replace trigger tri_name

after [before]logon [logoff] on datebase

begin

執行語句

end;

實際例子

登入觸發器:

create or replace trigger tri7

after logon on datebase

insert into logon_table(自己另行建立此表) (username,logon_time,address) values (ora_login_user,sysdate,ora_client_ip_address);

begin

end;

17.ddl觸發器(一般是由系統管理員完成的,也需要dba賬戶)

可以被create alter drop觸發

create or replace trigger 觸發器名

after ddl on 方案名.schema

begin

執行語句

end;

18.實際應用:

建立一張表

create table my_ddl_record(event varchar2(64),username varchar2(64),ddl_time date);

建立觸發器

create or replace trigger tri9

after ddl on scott.schema

begin

insert into my_ddl_record values(ora_sysevent,ora_login_user,sysdate);

end;

19.指定觸發器的禁用與啟用

alter trigger 觸發器名 disable/enable

20.禁用或者啟用指定表上的所有觸發器

alter table 表名 disable all trigger;(9i)

alter table 表名 enable all trigger;(9i)

21.徹底刪除觸發器

drop trigger 觸發器名;

oracle 學習筆記

本地網路服務名配置 在客戶機的 oracle oracle90 network admin 安裝目錄下有乙個名為tnsnames.ora的命名檔案,其中儲存的就是本地命名的配置.當客戶機應用程式提出登入要求時,其使用的連線字串被命名檔案解析.在命名檔案裡儲存的是與連線字串對應的網路位址.例如 mys...

Oracle學習筆記

許可權管理 oracle 9i 3個預設使用者 sys 超級管理員 預設密碼 change on install system 普通管理員 預設密碼 manager scott 普通使用者 預設密碼 tiger oracle 10g sys 密碼在安裝時設定 system 密碼在安裝時設定 scot...

oracle學習筆記

1 set linesize 100 設定長度 2 set pagesize 30 設定每頁顯示數目 3 em a.sql 開啟記事本 4 a 執行檔案a中的 可指定檔案的路徑 d a.txt 5 conn 使用者名稱 密碼 根據使用者名稱和密碼連線資料庫 如果連線超級管理員 sys 則應加上as ...