在適用於 PostgreSQL 的 Azure 資料庫中建立預存程序

已完成

針對特定工作建立預存程序有許多優點,包括擴充適用於 PostgreSQL 的 Azure 資料庫功能。 當您想要執行下列作業時,請使用預存程序:

  • 在一個位置開發和測試複雜的程式碼,並在需要時呼叫。
  • 有效率地執行程式碼。 傳回相同結果的預存程序更有效率,因為它們已預先編譯並儲存在 Azure Database PostgreSQL 伺服器中。
  • 讓您的程式碼更容易讀取。
  • 在交易中包含錯誤處理。
  • 隱藏使用者的複雜度。

雖然適用於 PostgreSQL 的 Azure 資料庫支援多種程式設計語言,但 SQL 是 PostgreSQL 的原生語言,最適合最佳化工具。

預存程序是使用 CREATE PROCEDURE 關鍵字所建立。 或者,使用 CREATE OR REPLACE PROCEDURE 來建立新的程序,或以相同名稱取代程序。

包含結構描述名稱,以在特定結構描述中建立程序。 否則會在目前的結構描述中建立。 程序名稱在結構描述內必須是唯一的,包含輸入引數型別。 不過,您可以將相同名稱提供給具有不同引數型別的程序或函式,以多載程序名稱。

建立程序的使用者是程序的擁有者。 您也必須指定語言。

程序採用下列參數:

  • name - 選擇性地包含結構描述名稱。
  • argmode - 引數的模式。 可以是 IN、INOUT 或 VARIADIC。 預設值為 IN。 不支援 OUT;請改用 INOUT。 VARDIADIC 是相同型別的未定義輸入引數數目,而且必須是最後一個輸入引數。
  • argname - 引數名稱。
  • argtype - 引數資料類型。
  • default_expr - 如果未指定參數,則使用 (相同型別的) 預設運算式。 在具有預設值的參數之後的輸入參數也必須具有預設值。
  • lang_name - 用來寫入程序的語言。 可以是 sql、c、internal 或使用者定義程序性語言的名稱,例如 plpgsql。

在下列範例中,會建立名稱為 myprocedure 並採用輸入參數 a 和 b 的預存程序。 IN 是參數的預設值,因此我們不需要明確地將其識別為輸入參數。 呼叫預存程序時,指派給這些參數的值會插入 mytable。

CREATE PROCEDURE myprocedure (a integer, b integer)
    LANGUAGE SQL
    AS $$
        INSERT INTO mytable VALUES (a, b);
    $$;

符號 $$ 是用來作為字串的開頭和結尾。 您也可以使用單引號,但可能會因此造成其他程式設計語言的問題,因此建議使用 $$