亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

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

2024-08-29 13:50:02
字體:
來源:轉載
供稿:網友
  Oracle數據庫數據對象中最基本的是表和視圖,其他還有約束、序列、函數、存儲過程、包、觸發器等。對數據庫的操作可以基本歸結為對數據對象的操作,理解和把握Oracle數據庫對象是學習Oracle的捷徑。

  表和視圖

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

  治理表

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

CREATE TABLE PRodUCts
  ( PROD_ID NUMBER(4),
   PROD_NAME VAECHAR2(20),
   STOCK_QTY NUMBER(5,3)
  );

  這樣我們就建立了一個名為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中表名或列名最長可以達30個字符串。表名應該以字母開始,可以在表名中包含數字、下劃線、#、$等。

  從其它表中建立表

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

SQL>CREATE TABLE emp AS SELECT * FROM employee

TABLE CREATED

SQL> CREATE TABLE Y AS SELECT * FROM X WHERE no=2

  需要注重的是假如查詢涉及LONG數據類型,那么CREATE TABLE....AS SELECT....將不會工作。

  更改表定義

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

  1、增加列

  語法:

ALTER TABLE [schema.] table_name ADD column_definition

  例:

ALTER TABLE orders ADD order_date DATE;

TABLE ALTER

  對于已經存在的數據行,新列的值將是NULL.

  2、更改列

  語法:

ALTER TABLE [schema.] table_name MODIFY column_name new_attributes;

  例:

ALTER TABLE orders MODITY (quantity number(10,3),status varchar2(15));

  這個例子中我們修改了表orders,將STATUS列的長度增加到15,將QUANTITY列減小到10,3;

  修改列的規則如下:

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

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

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

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

  3、刪除數據列

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

  刪除數據列的語法是:

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 {TABLECLUSTER} [schema.] name {DROPREUSE STORAGE}

  例:

SQL> TRUNCATE TABLE t1;

TABLE truncate.

  治理視圖

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

  建立視圖

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

  例:

SQL> CREATE VIEW TOP_EMP AS
SELECT empno EMPLOYEE_ID,ename EMPLOYEE_NAME,salary
FROM emp
WHERE salary >2000

  用戶可以在創建視圖的同時更改列名,方法是在視圖名后立即加上要命名的列名。重新定義視圖需要包含OR REPLACE子串。

SQL> CREATE VIEW TOP_EMP
(EMPLOYEE_ID,EMPLOYEE_NAME,SALARY) AS
SELECT empno ,ename ,salary
FROM emp
WHERE salary >2000

  假如在創建的視圖包含錯誤在正常情況下,視圖將不會被創建。但假如你需要創建一個帶錯誤的視圖必須在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小于2000的數據行。

  刪除視圖

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

  例:

DROP VIEW TOP_EMP;


上一篇:Oracle PL/SQL語言初級教程之完整性約束

下一篇:Oracle PL/SQL語言初級教程之過程和函數

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲色图50p| 国产91精品视频在线观看| 国产91精品久| 国产精品色视频| 清纯唯美亚洲激情| 国产精品老牛影院在线观看| 欧美超级免费视 在线| 国产欧美一区二区三区在线| 国产999在线| 欧美小视频在线观看| 亚洲最大的免费| 欧美猛交免费看| 国产大片精品免费永久看nba| 日韩av在线不卡| 日韩精品免费在线观看| 成人av在线网址| 日韩毛片在线观看| 两个人的视频www国产精品| 成人国产在线激情| 日韩在线观看网站| 日韩不卡中文字幕| 久久精品小视频| 欧美专区福利在线| 日韩av在线看| 91免费视频国产| 日韩av在线直播| 国产精品一区二区久久久久| 欧洲成人免费aa| 国产精品99久久久久久白浆小说| 日韩精品中文字幕在线播放| 亚洲毛片在线看| 国产丝袜视频一区| 亚洲欧美日本另类| 日韩免费中文字幕| 国产美女91呻吟求| 色哟哟亚洲精品一区二区| 欧美日韩国产麻豆| 日韩美女av在线| 亚洲精品一区二三区不卡| 亚洲视频在线播放| 久久久久久国产三级电影| 久久香蕉国产线看观看网| 精品呦交小u女在线| 亚洲免费影视第一页| 96精品久久久久中文字幕| 国产精品福利网站| 尤物yw午夜国产精品视频明星| 欧美激情日韩图片| 亚洲成avwww人| 91伊人影院在线播放| 亚洲人成电影网站色xx| 97视频在线观看网址| 亚洲性猛交xxxxwww| 国产精品入口福利| 亚洲国产成人久久综合| 亚洲伊人久久综合| 亚洲精品一区二区久| 中文字幕日韩在线视频| 欧美一乱一性一交一视频| 国产福利视频一区二区| 久久久久久久激情视频| 日韩中文视频免费在线观看| 国产精品色视频| 欧美激情久久久| 国产精品毛片a∨一区二区三区|国| 成人福利视频网| 欧美肥婆姓交大片| 午夜精品一区二区三区在线视| 欧美激情视频一区二区| 18久久久久久| 久久久久久91香蕉国产| 国产日韩中文字幕在线| 亚洲国产女人aaa毛片在线| 欧美日韩福利电影| 欧美在线视频观看| 欧美性猛交xxxx乱大交3| 欧美xxxx做受欧美| 日韩天堂在线视频| 亚洲在线www| 国产精品海角社区在线观看| 久热在线中文字幕色999舞| 91精品国产成人www| 日本精品在线视频| 精品亚洲一区二区| 国产在线视频一区| 久久激情视频免费观看| 日韩欧美在线视频免费观看| 性色av一区二区三区在线观看| 精品中文字幕久久久久久| 国产精品www色诱视频| 国产日韩欧美中文| 亚洲国产精品久久久久| 亚洲精品一区二区在线| 日韩激情av在线播放| 国产色综合天天综合网| 欧美激情亚洲综合一区| 韩曰欧美视频免费观看| 欧美成人精品一区二区| 久久久久五月天| 国产精品中文久久久久久久| 国产精品久久久久久久久久东京| 久久国产精品网站| 国产精品极品在线| 欧美日韩亚洲成人| 91国产在线精品| 欧美成人国产va精品日本一级| 欧美大片在线看免费观看| 欧美一级视频免费在线观看| 欧美一区二区三区免费观看| 欧亚精品中文字幕| 日韩最新免费不卡| 色多多国产成人永久免费网站| 国产日韩欧美一二三区| 国产精品88a∨| 国产精品丝袜高跟| 91国内精品久久| 亚洲欧洲日产国码av系列天堂| 国内精品模特av私拍在线观看| 国产第一区电影| 日韩亚洲欧美成人| 日韩在线视频观看正片免费网站| 国产亚洲欧美另类中文| 日韩亚洲欧美中文高清在线| 国产亚洲一区二区在线| 92看片淫黄大片看国产片| 欧美亚洲成人网| 欧洲中文字幕国产精品| 久久久久国产精品免费网站| 国产亚洲精品日韩| 国产精品视频久久久久| 久久九九国产精品怡红院| 日韩欧美亚洲综合| 国产精品扒开腿做爽爽爽视频| 亚洲毛片在线看| 欧美日韩精品国产| 亚洲精品视频免费在线观看| 亚洲性夜色噜噜噜7777| 国产脚交av在线一区二区| 欧美高清无遮挡| 中文字幕免费精品一区高清| 国产精品美腿一区在线看| 国产精品白丝av嫩草影院| 人妖精品videosex性欧美| 中文字幕亚洲色图| 97在线看福利| 亚洲伊人成综合成人网| 欧美极品在线视频| 夜夜嗨av一区二区三区免费区| 91天堂在线视频| 欧美极品美女视频网站在线观看免费| 欧美精品在线视频观看| 日本精品免费一区二区三区| 亚洲精品美女网站| 日韩欧美a级成人黄色| 日韩av色在线| 久久久成人精品视频| 国产精品久久久久久久电影| 成人中文字幕+乱码+中文字幕| 亚洲第一在线视频| 国产成人亚洲综合91| 日韩动漫免费观看电视剧高清| 亚洲精品国产精品自产a区红杏吧| 午夜精品福利电影| 日韩精品在线第一页|