程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 6.4、視圖、序列、同義詞--Oracle模式對象,6.4--oracle

6.4、視圖、序列、同義詞--Oracle模式對象,6.4--oracle

編輯:Oracle教程

6.4、視圖、序列、同義詞--Oracle模式對象,6.4--oracle


視圖view

是一個虛擬表,不存儲數據值。

Create or replace view 病人基本信息
as
select 病人id,住院號,姓名,性別,年齡 from 病人信息表;

在創建視圖時,只是將視圖的定義存入到數據庫字典中,並沒有執行select查詢,只有當用戶對視圖查詢時,系統才按照視圖的定義從基本表中獲取數據。

 

視圖上可進行insert、update和delete操作。
一個視圖中,可以同時包含可更新的字段不可更新的字段
例如:

Create or replace view 病人基本信息(病人id,住院號,姓名,性別,病人年齡)
as
select 病人id,住院號,姓名,性別,年齡+1 from 病人信息表;

年齡字段是,由源表字段“年齡”+1計算出來的,所以病人年齡字段不能更新,其他字段可以更新。
可以通過數據字典USER_UPDATABLE_COLUMNS視圖,來查詢哪些字段可以更新,哪些不能更新。


WITH CHECK OPTION選項

Create or replace view stu_age_view(學生編號,學生姓名,學生年齡)
as
select sid,sname,sage
from student
where name='小白';

--此時這個視圖是可以insert插入數據的,如下操作:

Insert into stu_age_view(學生編號,學生姓名,學生年齡)
Values(3,'小紅',20);

--查詢表student結果如下:
Select* from student;
SID SNAME SSEX SAGE SCLASS
---- ------- ------ ------ ------
1     小白      男      22      1
2     小明      男      21      1
3     小紅               20

在更新視圖時,違反了【Where name='小白'】限制條件,往表中插入了數據。
可以通過在創建表的時候使用WITH CHECK OPTION選項,有了該子句,再插入類似記錄時,Oracle會提示報錯ora-01402:視圖 WITH CHECK OPTION子句違規。

刪除視圖:
Drop view stu_age_view;

 

序列sequence:
用於產生一系列唯一數字的數據庫對象。不占用實際存儲空間,只是在字典中保存定義
使用序列可以實現自動產生主鍵值。

要有創建序列的權限 create sequence 或 create any sequence

創建序列的語法:
CREATE SEQUENCE sequence_name --創建序列名稱
[INCREMENT BY increment] --遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 默認是1
[START WITH start] --起始值,遞增默認是minvalue 遞減是maxvalue
[MAXVALUE n | NOMAXVALUE] --最大值
[MINVALUE n | NOMINVALUE] --最小值
[CACHE n | NOCACHE]--預分配,並存入到內存
[CYCLE | NOCYCLE]; --循環/不循環

兩個偽列:
NEXTVAL --返回序列生成的下一個值
CURRVAL --返回序列的當前值
NEXTVAL 應在 CURRVAL 之前指定 ,二者應同時有效

修改序列:
Alter sequence stu_seq increment by 2;
對序列修改後,緩存中保存的序列值將全部丟失。

刪除序列:
Drop sequence stu_seq;

 

同義詞synonym:
是表、索引、視圖等模式對象的一個別名。不占用任何實際的存儲空間。
分兩類:公共同義詞、私有同義詞

創建同義詞:
Create [public] SYNONYM synonym_name for schema_object;

刪除同義詞:
Drop public sysnonym pub_sysnonym_name;

----執行查找所有失效的同義詞,生成刪除腳本如下:

select 'drop '|| decode(s.owner,'PUBLIC','public synonym ','synonym ' || s.owner || '.')
|| s.synonym_name
|| ';' as "Dropping invalid synonyms:"
from dba_synonyms s
where table_owner not in ('SYSTEM', 'SYS')
and db_link is null
and not exists
(select null from dba_objects o
where s.table_owner = o.owner
and s.table_name = o.object_name);

 

----查詢當前用戶下,沒有創建同義詞的對象有哪些?

Select *
from dba_objects s
where owner in ('ZLHIS') And object_type In('TABLE','PROCEDURE','FUNCTIONS')
and Not exists
(select null from dba_synonyms o
Where o.table_owner = s.owner
and o.table_name = s.object_name And o.db_link is null)

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved