zhyiwww
          用平實(shí)的筆,記錄編程路上的點(diǎn)點(diǎn)滴滴………
          posts - 536,comments - 394,trackbacks - 0

          CREATE RULE

          Name

          CREATE RULE — 定義一個(gè)新規(guī)則
          CREATE RULE name AS ON event
              TO object [ WHERE condition ]
              DO [ INSTEAD ] action
          
          這里 action 可以是:
          
          NOTHING
          |
          query
          |
          ( query ; query ... )
          |
          [ query ; query ... ]
            

          輸入

          name

          創(chuàng)建的規(guī)則名.

          event

          事件是 SELECTUPDATEDELETEINSERT 之一.

          object

          對象是 tabletable.column. (目前只有 table 形式實(shí)際上是實(shí)現(xiàn)了的.

          condition

          任意 SQL 布爾條件表達(dá)式.條件表達(dá)式除了引用 newold 之外不能引用任何表.

          query

          組成 action 的查詢可以是任何 SQL SELECTINSERTUPDATEDELETE,或 NOTIFY 語句之一.

          conditionaction 里, 特殊表名字 newold 可以用于指向引用表 ( object) 里的數(shù)值 new 在 ON INSERT 和 ON UPDATE 規(guī)則里 可以指向被插入或更新的新行. old 在 ON SELECT,ON UPDATE,和 ON DELETE 規(guī)則里可以指向現(xiàn)存的被選擇,更新,或者刪除的行.

          輸出

          CREATE

          成功創(chuàng)建規(guī)則后的返回信息.

          描述

          Postgres 規(guī)則系統(tǒng) 允許我們在從數(shù)據(jù)庫或表中更新, 插入或刪除東西時(shí)定義一個(gè)可選的動作來執(zhí)行。目前,規(guī)則用于實(shí)現(xiàn)表視圖。

          規(guī)則的語意是在一個(gè)單獨(dú)的記錄正被訪問,更新,插入或刪除時(shí), 將存在一個(gè)舊記錄(用于檢索,更新和刪除)和一個(gè)新記錄 (用于更新和追加). 這時(shí)給定事件類型和給定目標(biāo)對象(表)的所有規(guī)則都將被檢查, (順序不定). 如果在 WHERE (如果有)子句里面所聲明的 condition? 為真,那么 action 部分的規(guī)則就被執(zhí)行. 如果聲明了 INSTEAD,那么 action 就會代替原來的查詢;否則它在執(zhí)行原來的查詢之前處理. 在 conditionaction 里面, 在舊記錄里字段的數(shù)值和/或新記錄里字段的數(shù)值被 old.attribute-namenew.attribute-name 代替.

          規(guī)則的 action 部分可以由一條或者多條查詢組成.要寫多個(gè)查詢,用圓括弧或者方括弧 把它們包圍起來. 這樣的查詢將以聲明的順序執(zhí)行(只是我們不能保證 對一個(gè)對象的多個(gè)規(guī)則的執(zhí)行順序). action 還可以是 NOTHING 表示沒有動作.因此,一個(gè) DO INSTEAD NOTHING 規(guī)則制止了 原來的查詢的運(yùn)行(當(dāng)條件為真時(shí)); DO NOTHING 規(guī)則是沒有用的.

          規(guī)則的 action 部分 執(zhí)行的時(shí)候帶有和觸發(fā)動作的用戶命令相同的命令和事務(wù)標(biāo)識符.

          注意

          目前,ON SELECT 規(guī)則必須是無條件的 INSTEAD 規(guī)則并且 必須有一個(gè)由一條 SELECT 查詢組成的動作. 因此,一條 ON SELECT 規(guī)則有效地把對象表轉(zhuǎn)成視圖,它的可見內(nèi)容 是規(guī)則的 SELECT 查詢返回的記錄而不是存儲在表中的內(nèi)容(如果有的話). 我們認(rèn)為寫一條 CREATE VIEW 命令比創(chuàng)建一個(gè)表然后定義一條 ON SELECT 規(guī)則在上面的風(fēng)格要好.

          為了在表上定義規(guī)則,你必須有規(guī)則定義權(quán)限. 用 GRANTREVOKE 修改權(quán)限.

          有一件很重要的事情是要避免循環(huán)規(guī)則. 比如,盡管下面兩條規(guī)則定義都是 Postgres 可以接受的, select 命令會導(dǎo)致 Postgres 報(bào)告 一條錯(cuò)誤信息,因?yàn)樵摬樵冄h(huán)了太多次:

          Example 1. 循環(huán)重寫規(guī)則組合的例子:

          CREATE RULE bad_rule_combination_1 AS
              ON SELECT TO emp
              DO INSTEAD 
          	SELECT * FROM toyemp;
               
          CREATE RULE bad_rule_combination_2 AS
              ON SELECT TO toyemp
              DO INSTEAD 
          	SELECT * FROM emp;
               

          下面這個(gè)對 EMP 的查詢企圖將導(dǎo)致 Postgres 產(chǎn)生一個(gè)錯(cuò)誤信息, 因?yàn)樵摬樵冄h(huán)了太多次:

          SELECT * FROM emp;
                

          兼容性

          SQL92

          CREATE RULE 語句是 Postgres 語言的擴(kuò)展. 在SQL92里沒有CREATE RULE 語句.



          |----------------------------------------------------------------------------------------|
                                     版權(quán)聲明  版權(quán)所有 @zhyiwww
                      引用請注明來源 http://www.aygfsteel.com/zhyiwww   
          |----------------------------------------------------------------------------------------|
          posted on 2006-06-02 18:51 zhyiwww 閱讀(299) 評論(0)  編輯  收藏 所屬分類: database
          主站蜘蛛池模板: 成都市| 农安县| 诸暨市| 东平县| 安义县| 宝鸡市| 西华县| 衡山县| 大兴区| 成武县| 绵阳市| 简阳市| 瓮安县| 图们市| 兴文县| 来宾市| 孟州市| 依兰县| 昌乐县| 建阳市| 万荣县| 日喀则市| 大渡口区| 进贤县| 苗栗县| 太康县| 双鸭山市| 隆德县| 泗阳县| 昭通市| 哈尔滨市| 克拉玛依市| 宁海县| 东兴市| 疏附县| 二手房| 杭锦旗| 铜山县| 金溪县| 莲花县| 宿松县|