<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 9.16\. 序列操作函數 本節描述用于操作_序列對象_的函數, 也叫序列生成器或者就叫序列。序列對象都是用[CREATE SEQUENCE](#calibre_link-42) 創建的特殊的單行表。一個序列對象通常用于為一個表的行生成唯一的標識符。 在[Table 9-41](#calibre_link-2231) 中列出的序列函數為我們從序列對象中獲取后續的序列值提供了簡單的、多用戶安全的方法。 **Table 9-41\. 序列函數** | 函數 | 返回類型 | 描述 | | --- | --- | --- | | ``currval(```regclass`) | `bigint` | 返回最近一次用`nextval`獲取的指定序列的數值 | | ``lastval()`` | `bigint` | 返回最近一次用`nextval`獲取的任意序列的數值 | | ``nextval(```regclass`) | `bigint` | 遞增序列并返回新值 | | ``setval(```regclass`, `bigint`) | `bigint` | 設置序列的當前數值 | | ``setval(```regclass`, `bigint`, `boolean`) | `bigint` | 設置序列的當前數值以及`is_called`標志 | 被序列函數操作的序列是用`regclass`參數聲明的,它只是序列在`pg_class` 系統表里面的 OID 。不過,你不需要手工查找 OID ,因為`regclass` 數據類型的輸入轉換器會幫你做這件事。只要寫出單引號包圍的序列名字即可, 因此它看上去像文本常量。要達到和處理普通SQL名字的兼容性, 這個字符串將轉換成小寫,除非在序列名字周圍包含雙引號,因此 ``` nextval('foo') _操作序列號 `foo`_ nextval('FOO') _操作序列號`foo`_ nextval('"Foo"') _操作序列號 `Foo`_ ``` 必要時序列名可以用模式修飾: ``` nextval('myschema.foo') _操作`myschema.foo`_ nextval('"myschema".foo') _同上_ nextval('foo') _在搜索路徑中查找`foo`_ ``` 參閱[Section 8.18](#calibre_link-1152)獲取有關`regclass`的更多信息。 > **Note:** 在PostgreSQL 8.1之前,序列函數的參數類型是`text` 而不是`regclass`,而上面描述的從文本字符串到 OID 值的轉換將在每次調用的時候發生。 為了向下兼容,這個機制仍然存在,但是在內部實際上是在函數調用前隱含地將`text` 轉換成`regclass`實現的。 > > 如果你把一個序列函數的參數寫成一個無修飾的文本字符串,那么它將變成類型為`regclass` 的常量。因為這只是一個 OID ,它將跟蹤最初標識的序列,而不管后面是否改名、模式是否變化等等。 這種"提前綁定"的行為通常是字段缺省和視圖里面引用序列所需要的。 但是有時候你可能想要"推遲綁定",這個時候序列的引用是在運行時解析的。 要獲取推遲綁定的行為,我們可以強制存儲為`text`常量,而不是`regclass`常量: > > ``` > nextval('foo'::text) _`foo` 在運行時查找_ > ``` > > 請注意,推遲綁定是PostgreSQL版本 8.1 之前唯一可用的行為, 因此你可能需要在舊的應用里如此使用來保留舊有的語意。 > > 當然,序列函數的參數也可以是表達式。如果它是一個文本表達式,那么隱含的轉換將導致運行時的查找。 用的序列函數有: `nextval` 遞增序列對象到它的下一個數值并且返回該值。這個動作是自動完成的: 即使多個會話并發運行`nextval`,每個進程也會安全地收到一個唯一的序列值。 如果一個序列對象是帶著缺省參數創建的,那么對它連續調用`nextval` 將返回從1開始的后續的數值。其他的行為可以通過使用[CREATE SEQUENCE](#calibre_link-42) 命令里的特殊參數獲取;參考其命令參考頁獲取更多信息。 > **Important:** 為了避免從同一個序列獲取數值的當前事務被阻塞,`nextval` 操作決不會回滾;也就是說,一旦一個數值已經被抓走,那么就認為它已經用過了, 即使調用`nextval`的事務后面又退出了也一樣。 這就意味著退出的事務可能在序列賦予的數值中留下未使用的"空洞"。 `currval` 在當前會話中返回最近一次`nextval`抓到的該序列的數值。 如果在本會話中從未在該序列上調用過`nextval`,那么會報告一個錯誤。 因為此函數返回一個會話范圍的數值,它也能給出一個可預計的結果, 可以判斷其它會話是否執行過`nextval`函數。 `lastval` 返回當前會話里最近一次`nextval`返回的數值。這個函數等效于`currval`, 只是它不用序列名作為參數,它抓取當前會話里面最近一次`nextval` 使用的序列的值。如果當前會話還沒有調用過`nextval`, 那么調用`lastval`是會報錯的。 `setval` 重置序列對象的計數器數值。2個參數的形式設置序列的`last_value` 字段為聲明數值并且將其`is_called`字段設置為`true`, 表示下一次`nextval`將在返回數值之前遞增該序列。`currval` 報告的值也設定為指定的值。在3個參數形式里`is_called`可以設置為`true` 或`false`。設置為`true`和2參數的形式影響相同。 如果你把它設置為`false`,那么下一次`nextval` 將返回這里聲明的數值而隨后`nextval`才開始遞增該序列。 因此在這種情況下`currval`報告的值沒有改變(這是8.3之前版本的一個變化)。比如, ``` SELECT setval('foo', 42); _下次`nextval`將返回43_ SELECT setval('foo', 42, true); _和上面一樣_ SELECT setval('foo', 42, false); _下次`nextval`將返回42_ ``` `setval`返回的結果就是它的第二個參數的數值。 > **Important:** 因為序列是非事務性的,如果事務回滾了,由`setval`所做的改變也不會取消。
                  <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>

                              哎呀哎呀视频在线观看