Postgresql

如何在過程中使用變數(不是函式)?

  • November 2, 2018

據我了解,在 Postgres 中,過程用於操作數據,函式用於讀取數據。我想:

  1. 聲明一個變數
  2. 選擇一個值到一個變數中
  3. 將變數插入另一個表
  4. 在事務中執行此操作
  5. 在儲存過程中執行此操作
  6. 必要時回滾
CREATE PROCEDURE test_variable()
LANGUAGE SQL
AS $$
   BEGIN;
       DECLARE some_id INTEGER;
       SELECT nextval('some_sequence') INTO some_id;
       INSERT INTO some_table (some_column) VALUES (some_id);
   END;
$$;

以上不適合我。當我尋找解決方案時,有很多不同的變數涉及函式$$、聲明、不返回任何東西的東西;似乎找不到一個簡單的例子;我只需要一個清晰的語法範例。

首先,SQL函式或過程 ( LANGUAGE SQL)沒有DECLARE節 - 也沒有BEGIN/ END。這些是過程語言 PL/pgSQL 的塊結構的關鍵字- 在函式和過程中都是如此。(也許還有其他 PL。)

就像 dezso 評論的那樣,不要將 plpgsql BEGIN(啟動一個塊)與 SQL BEGIN;(啟動一個事務)混淆。SQL函式中**兩者都不允許。後者在 SQL過程中是允許的。

要使用變數,您需要**LANGUAGE plpgsql**(或其他 PL 之一)。給你一個清晰的例子:

CREATE PROCEDURE test_variable()
LANGUAGE plpgsql AS
$$
DECLARE
  _some_id int;
BEGIN
  SELECT nextval('some_sequence') INTO _some_id;
  INSERT INTO some_table (some_column) VALUES (_some_id);
END
$$;

完全相同的主體也適用於功能。

引用自:https://dba.stackexchange.com/questions/221637