是一個虛擬表,不存儲數據值。
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)