Ale*_*ans 3 postgresql transaction plpgsql functions sql-procedure
据我了解,在 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;
$$;
Run Code Online (Sandbox Code Playgroud)
以上对我不起作用。当我寻找解决方案时,有很多不同的变量涉及函数$$
、声明、事物不返回任何内容;似乎找不到一个简单的例子;我只需要一个清晰的语法示例。
首先,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
$$;
Run Code Online (Sandbox Code Playgroud)
完全相同的主体也适用于函数。
归档时间: |
|
查看次数: |
9629 次 |
最近记录: |