熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

OraclePL/SQL語言初級教程之表和視圖

2013-11-13 15:44:11  來源: Oracle 

  Oracle數據庫數據對象中最基本的是表和視圖其他還有約束序列函數存儲過程觸發器等對數據庫的操作可以基本歸結為對數據對象的操作理解和掌握Oracle數據庫對象是學習Oracle的捷徑

  表和視圖

  Oracle中表是數據存儲的基本結構ORACLE引入了分區表和對象表ORACLEi引入了臨時表使表的功能更強大視圖是一個或多個表中數據的邏輯表達式本文我們將討論怎樣創建和管理簡單的表和視圖

  管理表

  表可以看作有行和列的電子數據表表是關系數據庫中一種擁有數據的結構用CREATE TABLE語句建立表在建立表的同時必須定義表名以及列的數據類型和大小例如

CREATE TABLE products
  ( PROD_ID NUMBER()
   PROD_NAME VAECHAR()
   STOCK_QTY NUMBER()
  );
  這樣我們就建立了一個名為products的表 關鍵詞CREATE TABLE後緊跟的表名然後定義了三列同時規定了列的數據類型和大小

  在創建表的同時你可以規定表的完整性約束也可以規定列的完整性約束在列上普通的約束是NOT NULL關於約束的討論我們在以後進行

  在建立或更改表時可以給表一個缺省值缺省值是在增加行時增加的數據行中某一項值為null時oracle即認為該值為缺省值

  下列數據字典視圖提供表和表的列的信息

    DBA_TABLES
    DBA_ALL_TABLES
    USER_TABLES
    USER_ALL_TABLES
    ALL_TABLES
    ALL_ALL_TABLES
    DBA_TAB_COLUMNS
    USER_TAB_COLUMNS
    ALL_TAB_COLUMNS

  表的命名規則

  表名標識一個表所以應盡可能在表名中描述表oracle中表名或列名最長可以達個字符串表名應該以字母開始可以在表名中包含數字下劃線#$等

  從其它表中建立表

  可以使用查詢從基於一個或多個表中建立表表的列的數據類型和大小有查詢結果決定建立這種形式的表的查詢可以選擇其他表中所有的列或者只選擇部分列在CREATE TABLE語句中使用關鍵字AS例如:

SQL>CREATE TABLE emp AS SELECT * FROM employee

TABLE CREATED

SQL> CREATE TABLE Y AS SELECT * FROM X WHERE no=
  需要注意的是如果查詢涉及LONG數據類型那麼CREATE TABLEAS SELECT將不會工作

  更改表定義

  在建立表後有時候我們可能需要修改表比如更改列的定義更改缺省值增加新列刪除列等等ORACLE使用ALTER TABLE語句來更改表的定義

  增加列

  語法

ALTER TABLE [schema] table_name ADD column_definition
  例

ALTER TABLE orders ADD order_date DATE;

TABLE ALTER
  對於已經存在的數據行新列的值將是NULL

更改列

  語法

ALTER TABLE [schema] table_name MODIFY column_name new_attributes;
  例

ALTER TABLE orders MODITY (quantity number()status varchar());
  這個例子中我們修改了表orders將STATUS列的長度增加到將QUANTITY列減小到;

  修改列的規則如下

    可以增加字符串數據類型的列的長度數字數據類型列的精度

    減少列的長度時該列應該不包含任何值所有數據行都為NULL

    改變數據類型時該列的值必須是NULL

    對於十進制數字可以增加或減少但不能降低他的精度

 刪除數據列

  優化ORACLE數據庫唯一的方法是刪除列重新建立數據庫在ORACLEi中有很多方法刪除列你可以刪除未用數據列或者可以標示該列為未用數據列然後刪除

  刪除數據列的語法是

ALTER TABLE [schema] table_name DROP {COLUM column_names | (column_names)}[CASCADE CONSTRAINS]
  要注意的是在刪除列時關於該列的索引和完整性約束也同時刪除注意關鍵字CASCADE CONSTRAINS如果刪除的列是多列約束的一部分那麼這個約束條件相對於其他列也同時刪除

  如果用戶擔心在大型數據庫中刪除列要花太多時間可以先將他們標記為未用數據列標記未用數據列的語法如下

ALTER TABLE [schema] table_name SET UNUSED {COLUM column_names | (column_names)}[CASCADE CONSTRAINS]
  這個語句將一個或多個數據列標記為未用數據列但並不刪除數據列中的數據也不釋放占用的磁盤空間但是未用數據列在視圖和數據字典中並不顯示並且該數據列的名稱將被刪除新的數據列可以使用這個名稱基於該數據列的索引約束統計等都將被刪除

  刪除未用數據列的語句是

ALTER TABLE [schema] table_name DROP {UNUSED COLUM | COLUMN CONTINUE}

  刪除表和更改表名

  刪除表非常簡單但它是一個不可逆轉的行為

  語法

DROP TABLE [schema] table_name [CASCADE CONSTRAINTS]  
  刪除表後表上的索引觸發器權限完整性約束也同時刪除ORACLE不能刪除視圖或其他程序單元但oracle將標示他們無效如果刪除的表涉及引用主鍵或唯一關鍵字的完整性約束時那麼DROP TABLE語句就必須包含CASCADE CONSTRAINTS子串

  更改表名

  RENAME命令用於給表和其他數據庫對象改名ORACLE系統自動將基於舊表的完整性約束索引權限轉移到新表中ORACLE同時使所有基於舊表的數據庫對象比如視圖程序函數等為不合法

  語法

RENAME old_name TO new_name;
  例

SQL> RENAME orders TO purchase_orders;

TABLE RENAMED

  截短表

  TRUNCATE命令與DROP命令相似 但他不是刪除整個數據表所以索引完整性約束觸發器權限等都不會被刪除缺省情況下將釋放部分表和視圖空間如果用戶不希望釋放表空間TRUNCATE語句中要包含REUSE STORAGE子串TRUNCATE命令語法如下

TRUNCATE {TABLE|CLUSTER} [schema] name {DROP|REUSE STORAGE}
  例

SQL> TRUNCATE TABLE t;

TABLE truncate
管理視圖

  視圖是一個或多個表中的數據的簡化描述用戶可以將視圖看成一個存儲查詢(stored query)或一個虛擬表(virtual table)查詢僅僅存儲在oracle數據字典中實際的數據沒有存放在任何其它地方所以建立視圖不用消耗其他的空間視圖也可以隱藏復雜查詢比如多表查詢但用戶只能看見視圖視圖可以有與他所基於表的列名不同的列名用戶可以建立限制其他用戶訪問的視圖

  建立視圖

  CREATE VIEW命令創建視圖定義視圖的查詢可以建立在一個或多個表或其他視圖上查詢不能有FOR UPDATE子串在早期的ORACLEi版本中不支持ORDER BY子串現在的版本中CREATE VIEW可以擁有ORDER BY子串

  例

SQL> CREATE VIEW TOP_EMP AS
SELECT empno EMPLOYEE_IDename EMPLOYEE_NAMEsalary
FROM emp
WHERE salary >
  用戶可以在創建視圖的同時更改列名方法是在視圖名後立即加上要命名的列名重新定義視圖需要包含OR REPLACE子串

SQL> CREATE VIEW TOP_EMP
(EMPLOYEE_IDEMPLOYEE_NAMESALARY) AS
SELECT empno ename salary
FROM emp
WHERE salary >
  如果在創建的視圖包含錯誤在正常情況下視圖將不會被創建但如果你需要創建一個帶錯誤的視圖必須在CREATE VIEW語句中帶上FORCE選項

CREATE FORCE VIEW ORDER_STATUS AS
SELECT * FROM PURCHASE_ORDERS
WHERE STATUS=APPPOVE;

SQL>/

warning :View create with compilation errors
  這樣將創建了一個名為ORDER_STATUS的視圖但這樣的視圖的狀態是不合法的如果以後狀態發生變化則可以重新編譯其狀態也變成合法的

  從視圖中獲得數據

  從視圖中獲得數據與從表中獲得數據基本一樣用戶可以在連接和子查詢中使用視圖也可以使用SQL函數以及所有SELECT語句的字串

  插入更新刪除數據

  用戶在一定的限制條件下可以通過視圖更新插入刪除數據如果視圖連接多個表那麼在一個時間裡只能更新一個表所有的能被更新的列可以在數據字典USER_UPDATETABLE_COLUMNS中查到

  用戶在CREATE VIEW中可以使用了WITH子串WITH READ ONLY子串表示創建的視圖是一個只讀視圖不能進行更新插入刪除操作WITH CHECK OPTION表示可以進行插入和更新操作但應該滿足WHERE子串的條件這個條件就是創建視圖WHERE子句的條件比如在上面的例子中用戶創建了一個視圖TOP_EMP在這個視圖中用戶不能插入salary小於的數據行

  刪除視圖

  刪除視圖使用DROP VIEW命令同時將視圖定義從數據字典中刪除基於視圖的權限也同時被刪除其他涉及到該視圖的函數視圖程序等都將被視為非法

  例

DROP VIEW TOP_EMP;


From:http://tw.wingwit.com/Article/program/Oracle/201311/17225.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.