<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之旅 廣告
                # 40.1\. 概述 PL/pgSQL是PostgreSQL數據庫系統的一個可加載的過程語言。 PL/pgSQL的設計目標是創建一種可加載的過程語言,可以 * 用于創建函數和觸發器過程, * 為SQL語言增加控制結構, * 執行復雜的計算, * 繼承所有用戶定義類型、函數、操作符, * 定義為被服務器信任的語言, * 容易使用。 PL/pgSQL創建的函數可以在那些使用內置函數一樣的情形下使用。 比如,可以創建復雜的條件計算函數,并隨后將之用于定義操作符或者用于函數索引中。 在PostgreSQL 9.0及其之后的版本中,PL/pgSQL是默認安裝的。 當然,PL/pgSQL仍然是一個可加載的模塊,因此,如果實際安全需要,管理員也可以選擇將它卸載掉。 ## 40.1.1\. 使用PL/pgSQL的優點 SQL是PostgreSQL和大多數其它關系型數據庫的命令語言。 它是可移植的,并且容易學習使用。但是所有SQL語句都必須由數據庫服務器獨立地執行。 這就意味著你的客戶端應用必須把每條命令發送到數據庫服務器, 等待它處理這個命令,接收結果,對結果進行一些處理, 然后再給服務器發送另外一條命令。 所有這些東西都會產生進程間通訊, 并且如果你的客戶端在另外一臺機器上甚至還會產生網絡開銷。 通過PL/pgSQL,可以把運算塊和一系列命令在數據庫服務器_內部_組成一個塊, 這樣就擁有了過程語言的能力并且簡化 SQL 的使用, 因而節約了大量的時間,因為不需要進行客戶端/服務器通訊。 * 忽略了客戶端和服務器端之間的額外往返行程。 * 客戶端不需要的中間結果無需在服務器端和客戶端來回傳遞。 * 不需要多次語法分析步驟。 比起不使用存儲函數來,這樣做能夠產生明顯的性能提升。 同樣,在PL/pgSQL里,仍然可以使用SQL的所有數據類型,操作符和函數。 ## 40.1.2\. 支持的參數和結果數據類型 使用PL/pgSQL所寫的函數能夠接受服務器支持的任何標量或數組數據類型作為參數, 并且同樣能夠返回這些類型的結果, 它們還可以接受或者返回任意用名字聲明的復合類型(行類型)。 還可以將一個PL/pgSQL函數聲明為一個返回`record`類型(行類型), 表明該結果是一個行類型,這個行的字段是在調用它的查詢中指定的, 就像在[Section 7.2.1.4](#calibre_link-1746)里討論的那樣。 與聲明SQL函數一樣,通過使用`VARIADIC`可以對PL/pgSQL 進行聲明為能接受可變數目的參數。 正如在[Section 35.4.5](#calibre_link-914)中討論的那樣。 PL/pgSQL函數還可以聲明為接受并返回多態的 `anyelement`, `anyarray`, `anynonarray`, `anyenum`和`anyrange`類型。 一個多態函數實際操作的數據類型可以在不同的調用環境中變化, 如在[Section 35.2.5](#calibre_link-909)里討論的那樣。 [Section 40.3.1](#calibre_link-1667)是一個使用例子。 PL/pgSQL還可以聲明為任何一個單個實例返回的數據類型"set",或者表。 這樣的函數通過為結果集每個需要返回的元素執行一個`RETURN NEXT`生成它的輸出, 或者通過使用`RETURN QUERY`來輸出評估查詢的結果。 最后,如果返回的結果沒有太大的價值,PL/pgSQL函數可以聲明為返回`void`。 PL/pgSQL函數也可以聲明為輸出某種類型的參數, 來代替明確的返回類型聲明。 這么做并未給該語言增加任何基礎設施, 只是通常更方便些,特別是返回多行數值的時候。同時, 也可以用`RETURNS TABLE`來代替`RETURNS SETOF`。 具體的例子在[Section 40.3.1](#calibre_link-1667)和 [Section 40.6.1](#calibre_link-1674)中。
                  <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>

                              哎呀哎呀视频在线观看