自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle 11g的新特性:虛擬列

數(shù)據(jù)庫(kù) Oracle
本文將為大家解釋Oracle 11g數(shù)據(jù)庫(kù)的新特性——虛擬列。在老的 Oracle 版本,當(dāng)我們需要使用表達(dá)式或者一些計(jì)算公式時(shí),我們會(huì)創(chuàng)建數(shù)據(jù)庫(kù)視圖,如果我們需要在這個(gè)視圖上使用索引,我們會(huì)創(chuàng)建基于函數(shù)的索引。而現(xiàn)在 Oracle 11g 允許我們直接在表上使用虛擬列來(lái)存儲(chǔ)表達(dá)式。

今天我將為大家解釋 Oracle 11g 數(shù)據(jù)庫(kù)的新特性 —— 虛擬列

介紹

在老的 Oracle 版本,當(dāng)我們需要使用表達(dá)式或者一些計(jì)算公式時(shí),我們會(huì)創(chuàng)建數(shù)據(jù)庫(kù)視圖,如果我們需要在這個(gè)視圖上使用索引,我們會(huì)創(chuàng)建基于函數(shù)的索引。

現(xiàn)在 Oracle 11g 允許我們直接在表上使用虛擬列來(lái)存儲(chǔ)表達(dá)式。

來(lái)看一個(gè)簡(jiǎn)單的例子:

  1. CREATE TABLE EMP  
  2. (  
  3.   EMPNO     NUMBER(6),  
  4.   SAL       NUMBER(8,2),  
  5.   COMM      NUMBER(8,2),  
  6.   SAL_PACK  GENERATED ALWAYS AS ( SAL + NVL(COMM,0) ) VIRTUAL  
  7. ); 

上述建的虛擬列 SAL_PACK 是由一個(gè)簡(jiǎn)單的表達(dá)式創(chuàng)建的,使用的關(guān)鍵字有 VIRTUAL(不過(guò)這個(gè)關(guān)鍵字是可選的),該字段的值是由 COMM 這個(gè)字段通過(guò)表達(dá)式計(jì)算而來(lái)的。

虛擬列的值是不存儲(chǔ)在磁盤(pán)的,它們是在查詢時(shí)根據(jù)定義的表達(dá)式臨時(shí)計(jì)算的。

我們不能往虛擬列中插入數(shù)據(jù):

  1. SQL> INSERT INTO emp VALUES (10, 1500, 500,2000);  
  2.  
  3. ERROR at line 1:  
  4. ORA-54013: INSERT operation disallowed on virtual columns 

我們也不能隱式的添加數(shù)據(jù)到虛擬列:

  1. SQL> INSERT INTO t VALUES (10, 1500, 500);  
  2.             *  
  3. ERROR at line 1:  
  4. ORA-00947: not enough values  

我們只能使用物理列來(lái)插入數(shù)據(jù)。

  1. SQL> INSERT INTO t (empno, sal,comm) VALUES (10, 1500 , 500);  
  2. 1 row created. 

然后可以查詢虛擬列的值:

  1. SQL> select * from emp;  
  2. EMPNO    SAL        COMM       SAl_PACK  
  3. -----   ------      -----      --------  
  4. 10      1500        500        2000  
  5.  
  6. 1 row selected. 

表達(dá)式是在查詢的時(shí)候即時(shí)計(jì)算的,然后輸出上述的結(jié)果。

虛擬列的索引和約束

索引和約束同樣可以應(yīng)用在虛擬列上。我們可使用如下SQL語(yǔ)句來(lái)創(chuàng)建索引:

  1. SQL> create index sal_pack_idx on emp(sal_pack);  
  2.            Index Created. 

我們也可以為虛擬列創(chuàng)建外鍵。

使用 PLSQL 函數(shù)來(lái)處理虛擬列

虛擬列的定義可使用 PLSQL 函數(shù),但要求該函數(shù)必須是確定的:

  1. CREATE OR REPLACE FUNCTION sum_num (in_num1 NUMBER, in_num2 NUMBER)  
  2.    RETURN NUMBER DETERMINISTIC  
  3. AS 
  4. BEGIN 
  5.    RETURN in_num1 + in_num2;  
  6. END

然后可以在虛擬列中使用上述函數(shù):

  1. SQL>ALTER TABLE emp ADD sal_pack_temp GENERATED ALWAYS AS ( sum_num(SAL,COMM) ):  
  2. Table Altered 

虛擬列的注釋

為虛擬列創(chuàng)建注釋的方法:

  1. SQL> COMMENT ON COLUMN emp.sal_pack IS 'Virtual column [sal+ comm]';  
  2. Comment created. 

上述例子看來(lái)虛擬列的功能比視圖本身要簡(jiǎn)單很多。

希望這對(duì)你也有用。

 

原文鏈接:http://www.oschina.net/question/12_52437

【編輯推薦】

  1. 11個(gè)重要的數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)則
  2. 讓數(shù)據(jù)庫(kù)變快的10個(gè)建議
  3. 20個(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)***實(shí)踐
責(zé)任編輯:林師授 來(lái)源: OSCHIN
相關(guān)推薦

2009-02-15 14:41:19

SQL Perform新特性Oracle

2010-04-16 09:50:26

Oracle 11g

2009-01-11 08:16:00

自適應(yīng)游標(biāo)共享新特性Oracle 11g

2009-11-20 12:55:08

Oracle 11g功

2009-03-05 11:02:12

NTP列式壓縮云計(jì)算

2009-09-02 15:35:57

Oracle 11g

2009-04-15 09:49:20

2010-01-19 10:17:41

Oracle 11g

2010-01-13 16:08:09

Oracle 11g 數(shù)據(jù)衛(wèi)士

2010-01-11 10:08:14

Oracle 11g

2010-04-30 13:35:28

Oracle 11g

2009-09-15 09:52:25

Oracle 11g分

2010-04-01 15:19:56

Oracle 11g壓

2010-04-13 15:56:03

Oracle 11g

2010-01-25 10:11:32

Oracle 11g

2011-04-15 09:11:21

2010-04-26 11:26:48

Oracle 11g

2010-04-07 17:27:38

Oracle 11g

2009-03-12 10:28:32

數(shù)據(jù)庫(kù)Oracle11g自我調(diào)整

2009-07-08 00:24:00

數(shù)據(jù)壓縮Oracle 11g
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)