Postgresql
如何在過程中使用變數(不是函式)?
據我了解,在 Postgres 中,過程用於操作數據,函式用於讀取數據。我想:
- 聲明一個變數
- 選擇一個值到一個變數中
- 將變數插入另一個表
- 在事務中執行此操作
- 在儲存過程中執行此操作
- 必要時回滾
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
(啟動一個塊)與 SQLBEGIN;
(啟動一個事務)混淆。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 $$;
完全相同的主體也適用於功能。