<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 41.6\. PL/Tcl里的觸發器過程 觸發器過程可以用 PL/Tcl 寫。PostgreSQL 要求當做觸發器調用的過程必需聲明為沒有參數并且返回類型為`trigger`的函數。 觸發器管理器傳遞給過程體的信息是通過下面變量傳遞的: `$TG_name` `CREATE TRIGGER`語句里的觸發器名稱。 `$TG_relid` 導致觸發器被調用的表的對象 ID 。 `$TG_table_name` 導致觸發器被調用的表的名字。 `$TG_table_schema` 導致觸發器被調用的表的模式。 `$TG_relatts` 以一個空表元素為前導的表中字段名稱的 Tcl 列表。所以用Tcl命令`lsearch` 在列表里查找元素名稱時,返回的從 1 開始計數的正整數,與PostgreSQL 里字段編號的傳統一樣。已經被刪除掉的字段位置的空的列表元素仍然會出現,這樣, 屬性編號與字段的對應就是正確的。 `$TG_when` 由觸發器事件類型決定的字符串`BEFORE`, `AFTER` 或 `INSTEAD OF` `$TG_level` 由觸發器事件類型決定的字符串`ROW`或`STATEMENT` `$TG_op` 由觸發器事件類型決定的字符串`INSERT`, `UPDATE`, `DELETE`或`TRUNCATE` `$NEW` 一個關聯數組,包含`INSERT`或`UPDATE`動作的新表行值, 如果是`DELETE`則為空。該數組是用字段名做索引的。那些為空的字段不會在數組中出現。 這不是為語句級別的觸發器設置的。 `$OLD` 一個關聯數組,包含`UPDATE`或`DELETE`動作的新表行, 如果是`INSERT`則為空。該數組是用字段名做索引的。那些為空的字段不會在數組中出現。 這不是為語句級別的觸發器設置的。 `$args` 如同在`CREATE TRIGGER`語句里給出的參數一樣的 Tcl 程序參數表。 這些參數在過程體里可以通過`$1` ... `$``_n_` 來訪問。 觸發器過程返回的值是字符串`OK`或`SKIP`之一,或者一個像`array get` Tcl 命令返回的數組那樣的東西。如果返回值是`OK`,觸發觸發器的操作 (`INSERT`/`UPDATE`/`DELETE`)將會正常進行。`SKIP` 告訴觸發器管理器不聲不響地忽略該行的操作。如果返回一個數組, 那么它告訴 PL/Tcl 返回一個修改后的行給觸發器管理器。這僅僅對行級別的`BEFORE` `INSERT` 或 `UPDATE`觸發器有意義,修改的行而不是`$NEW`里面給出的行被插入; 或對于行級別的`INSTEAD OF` `INSERT` 或 `UPDATE`觸發器, 返回的行用來提供給`INSERT RETURNING`或`UPDATE RETURNING`命令。 其他觸發器類型忽略返回值。 下面是一個小的觸發器過程的例子,它強制表內的一個整數值對行的更新次數進行跟蹤。 對插入的新行,該值初始化為 0 并且在每次更新操作中加一。 ``` CREATE FUNCTION trigfunc_modcount() RETURNS trigger AS $$ switch $TG_op { INSERT { set NEW($1) 0 } UPDATE { set NEW($1) $OLD($1) incr NEW($1) } default { return OK } } return [array get NEW] $$ LANGUAGE pltcl; CREATE TABLE mytab (num integer, description text, modcnt integer); CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab FOR EACH ROW EXECUTE PROCEDURE trigfunc_modcount('modcnt'); ``` 請注意觸發器過程本身并不知道字段名字;那些是從觸發器參數中提供的。 這樣就可以讓將觸發器過程復用于不同的表。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看