實驗目的
(1) 掌握視圖的建立、查詢、修改、刪除操作。
(2) 掌握同義詞的建立、查詢、修改、刪除操作,比較對同義詞的操作與對原數據庫對象的操作是否一致。
(3) 掌握序列的建立、查詢、修改、刪除操作,利用序列向數據庫表中插入數據。
實驗內容
1.創建視圖
(1) 利用企業管理器為實現顯示醫保卡信息創建視圖,該視圖中包括醫保卡信息、醫保卡所屬人信息和所屬人單位信息,視圖名為“ygbx_card_view”。
(2)利用SQL*Plus或iSQL*Plus為實現員工持醫保卡到醫院消費的功能創建視圖,該視圖中包括員工的信息、醫保卡信息、醫保信息和消費等信息,視圖名為“consume_view”。
SQL> create view consume_view as select staff.sno,sname,ssex,sbirthday,
2 saddress,stel,staff.cno,staff.bno,ctype,cmoney,idate,imoney,see.hno,csdate,mname,mnum,csmoney
3 from staff,insurance,card,consume,see
4 where staff.sno=see.sno and see.hno=consume.cno and consume.cno=card.cno and card.cno=insurance.cno ;
(3) 利用SQL*Plus或iSQL*Plus為企業醫保繳費信息功能創建視圖,該視圖中包括醫保繳費的企業信息,醫保卡信息和企業醫保繳費費用等信息,視圖名為“insurnce_view”。
SQL> create view insurance_view as select insurance.bno,bname,btype,baddress,btel,card.cno,ctype,cmoney,
2 hno,csdate,mname,mnum,csmoney
3 from insurance,business,card,consume
4 where insurance.bno=business.bno and insurance.cno=card.cno
5 ;
(4) 利用SQL*Plus或iSQL*Plus為企業表創建視圖,視圖名為“business_view”。
SQL> create view business_view as
2 select bno,bname,btype,baddress,btel
3 from business;
2.查看視圖
(1) 利用企業管理器查看“ygbx_user”方案下的視圖。
(2) 利用企業管理器查看“consume_view”視圖的信息。
(3)利用SQL*Plus或iSQL*Plus查看“card_view”視圖的子查詢語句。
SQL> select text from user_views where view_name='YGBX_CARD_UIEW'
2 ;
(4)利用SQL*Plus或iSQL*Plus顯示“insurance_view”視圖的信息。
SQL> select view_name,view_type,read_only,text,text_length from user_views
2 where view_name='insurance_view'
3 ;
3.視圖數據的更新
(1) 利用SQL*Plus或iSQL*Plus向“business_view”插入一個記錄,企業編號為“B1997010287”,企業名稱為“格林制藥”,企業類型為“企業”,企業地址為“鴨綠江街98號”,聯系電話為“84692315”。
SQL> alter table business modify(bno char(20));
表已更改。
SQL> insert into business_view values('B1997010287','格林制藥','企業','鴨綠江街98號','84692315');
已創建 1 行。
(2) 利用SQL*Plus或iSQL*Plus查看“business”表是否有變化。
SQL> select * from business;
4.刪除視圖
(1) 利用企業管理器刪除“business_view”視圖。
(2) 利用企業管理器刪除“card_view”視圖。
(3) 利用SQL*Plus或iSQL*Plus刪除“consume_view”視圖。
SQL> drop view consume_view;
(4) 利用SQL*Plus或iSQL*Plus刪除“insurnce_view”視圖。
SQL> drop view insurance_view;
5.創建同義詞
(1) 利用企業管理器創建企業表同義詞,名為“qyb”。
SQL> grant create public synonym to scott;
授權成功。
(2) 利用SQL*Plus或iSQL*Plus創建醫保卡表的同義詞,名為“ybk”。
SQL> create synonym ybk for card;
同義詞已創建。
6.查詢同義詞
(1) 利用企業管理器查看同義詞“qyb”。
(2) 利用SQL*Plus或iSQL*Plus查看同義詞“ybk”。
SQL> select * from user_synonyms where synonym_name='ybk';
7.刪除同義詞
(1) 利用企業管理器刪除同義詞“qyb”。
(2) 利用SQL*Plus或iSQL*Plus刪除同義詞“ybk”。
SQL> drop synonym ybk;
同義詞已刪除。
8.創建序列
(1) 利用企業管理器創建序列,該序列最大值為“28000”,最小值為“60”,步長為“1”,可循環,序列名為“ygbx_seq1”。
(2) 利用SQL*Plus或iSQL*Plus創建序列,該序列最大值無限制,最小值為“1”,步長為“10”,序列名為“ygbx_seq2”。
SQL> create sequence ygbx_seq2 nocycle noorder nomaxvalue minvalue 1
2 increment by 10 start with 1;
序列已創建。
9.查詢序列
(1) 利用企業管理器查看序列“ygbx_seq1”。
(2) 利用SQL*Plus或iSQL*Plus查看同義詞“ygbx_seq2”。
SQL> select * from user_sequences where sequence_name='ygbx_seq2';
10.修改序列
(1) 利用企業管理器修改序列“ygbx_seq1”,將該序列最大值設為“82000”,最小值設為“100”,步長設為“5”。
最小值不能大於當前值,所以最小值為60
(2) 利用SQL*Plus或iSQL*Plus修改序列“ygbx_seq2”,將該序列最大值設為“1000”。
SQL> alter sequence ygbx_seq2 maxvalue 1000;
序列已更改。
11.刪除序列
(1) 利用企業管理器刪除序列“ygbx_seq1”。
(2) 利用SQL*Plus或iSQL*Plus刪除序列“ygbx_seq2”。
SQL> drop sequence ygbx_seq2;
序列已刪除。
表1 企業(business)表結構
表2醫院(hospital)表結構
表3醫保卡(card)表結構
表4員工(staff)表結構
表5就診表(see)結構
表6消費(consume)表結構
表7醫保(insurance)表結構
實驗總結:
1. 可以采用CREATE OR REPLACE VIEW 語句修改視圖,實質是刪除原視圖並重建該視圖,但是會保留該視圖上授予的各種權限。
2. 序列用於產生惟一序號的數據庫對象,用於為多個數據庫用戶依次生成不重復的連續整數。通常使用序列自動生成表中的主鍵值。序列不占用實際的存儲空間,在數據字典中只存儲序列的定義描述。
3. 視圖是從一個或多個表或視圖中提取出來的數據的一種表現形式。在數據庫中只有視圖的定義,而沒有實際對應“表”的存在,因此視圖是一個“虛”表。當對視圖進行操作時,系統根據視圖定義臨時生成數據。
4. 可以使用DROP VIEW語句刪除視圖。刪除視圖後,該視圖的定義從數據字典中刪除,同時該視圖上的權限被回收,但是對數據庫表沒有任何影響。
5. 同義詞是數據庫中表、索引、視圖或其他模式對象的一個別名。利用同義詞,一方面為數據庫對象提供一定的安全性保證,例如可以隱藏對象的實際名稱和所有者信息,或隱藏分布式數據庫中遠程對象的位置信息;另一個方面是簡化對象訪問。
6. 視圖創建後,就可以對視圖進行操作,包括數據查詢、DML操作等。因為視圖是“虛表”,因此對視圖的操作最終轉換為對基本表的操作。