oracle 11g實驗五 觸發器的使用

2022-09-02 20:45:09 字數 4588 閱讀 7744

實驗要求:

實驗目的

1、  理解觸發器的概念、作用及分類;

2、  掌握觸發器的建立、使用;

實驗內容

1、  建立表orders:用於儲存訂單列表資訊;表order_items:用於儲存單個訂單的詳細資訊。其結構分別為:

表1 orders表結構

欄位名字段型別

字段寬度

說明id

number

訂單編號(主鍵)

order_date

date

訂單日期(非空)

user_name

varchar2

客戶名稱(非空)

city

varchar2

客戶所在城市(預設瀋陽)

表2 order_items表結構

欄位名字段型別

字段寬度

說明order_id

number

訂單編號(主鍵)

product_name

varchar2

產品名稱(非空)

quantity

number

數量(大於0,小於100)

unit_price

number

(10,2)

產品單價

2、  建立觸發器,將使用者對orders表的修改,儲存到日誌表(自己建立)中。

3、  測試觸發器。

4、  建立觸發器,限制只有scott使用者可以修改表orders。

5、  測試觸發器。

6、  刪除觸發器。

7、  建立使用者簽訂訂單詳細資訊檢視view_user_order,包括使用者名稱、訂單號、商品名、數量、單價。

8、  建立觸發器,實現更新檢視,更新及表資料。

9、  測試觸發器。

10、刪除觸發器。

實驗答案:

--建立orders表

create table orders(

id number(20) primary key not null,

order_date date not null,

user_name varchar2(10) not null,

city varchar2(20) default '瀋陽'

);--建立order_items表

create table order_items(

order_id number(20) primary key,

product_name varchar2(20) not null,

quantity number(4) check(quantity between 0 and 100),

unit_price number(10,2)

);--2、 建立觸發器,將使用者對orders表的修改,儲存到日誌表(自己建立)中。

--日誌表

create table t_log

( rid varchar2(32),

name varchar2(1000),

rq date default sysdate,

oldvalue varchar2(255),

newvalue varchar2(255)

); --目標表

create table orders(

id number(20) primary key not null,

order_date date not null,

user_name varchar2(10) not null,

city varchar2(20) default '瀋陽'

);create or replace trigger order_loggin

after update

on orders

referencing new as new old as old

for each row

declare

begin

if :new.city<>:old.city

then

insert into t_log (rid,name,newvalue,oldvalue)

values(:new.id,'城市', :new.city , :old.city);

end if;

if :new.user_name<>:old.user_name

then

insert into t_log (rid,name,newvalue,oldvalue)

values(:new.id,'姓名',:new.user_name,:old.user_name);

end if;

if :new.order_date<>:old.order_date

then

insert into t_log (rid,name,newvalue,oldvalue)

values(:new.id,'訂單日期',:new.order_date,:old.order_date);

end if;

end order_loggin;

--3、 測試觸發器。

update orders set user_name='213456' where id='1';

select * from t_log;

--4、 建立觸發器,限制只有scott使用者可以修改表orders。

create or replace

trigger alter_order

before insert or update or delete

on orders

declare

user_name varchar2(30);

begin

select user into user_name from dual;

if(lower(user_name)<>'scott') then

end if;

end alter_order;

--5、 測試觸發器。

update orders set user_name='111' where id='1';

--6、 刪除觸發器。

drop trigger alter_order;

create table orders(

id number(20) identified(1,1) primary key not null,

order_date date not null ,

user_name varchar2(10) not null,

city varchar2(20) default '瀋陽'

);create table order_items(

order_id number(20) primary key,

product_name varchar2(20) not null,

quantity number(4) check(quantity between 0 and 100),

unit_price number(10,2)

);--7、 建立使用者簽訂訂單詳細資訊檢視view_user_order,包括使用者名稱、訂單號、商品名、數量、單價。

create or replace view view_user_order

as select user_name,order_id,product_name,quantity,unit_price from order_items join orders on(order_items.order_id=orders.id);

--測試

select * from view_user_order;

--8、 建立觸發器,實現更新檢視,及更新表資料。

create or replace

trigger view_user_order_trigger

instead of

insert on view_user_order

for each row

begin

insert into orders(id,user_name) values(:new.order_id,:new.user_name);

insert into order_items(order_id, product_name, quantity,unit_price)

values(:new.order_id, :new.product_name, :new.quantity, :new.unit_price);

end view_user_order_trigger;

--9、 測試觸發器。

insert into view_user_order values('12310',4,'**',20,1500);

insert into view_user_order values('12311',5,'**',20,1500);

--10、 刪除觸發器。

drop trigger view_user_order_trigger;

Oracle11g學習 觸發器

1 觸發器 1.1 語法 語法 create or replace trigger 觸發器名 before after insert delete update of 列名 on 表名 for each row 說明 關鍵字 before 在操作完成前觸發 after 則是在操作完成後觸發 關鍵字 ...

解除安裝oracle 11g

估計和以前的版本一樣,先刪除物理檔案,然後再刪除登錄檔的檔案。大致方法如下 1 刪除物理檔案 1 oracle安裝檔案。2 系統目錄下,program files檔案下的oracle檔案 2 登錄檔中大概有這麼幾個地方 hkey local machine software 刪除oracle目錄 h...

oracle 11G 解除安裝

oracle deinstall deconfig tool start check operation start 安裝檢查配置開始 選擇進行解除安裝的 oracle 主目錄型別為 sidb 檢查主產品清單位置是否存在 c program files oracle inventory 安裝檢查配置...