将多个 INSERT 语句放入存储过程
Put several INSERT statements into a stored procedure
我有几个如下的插入请求:
insert into dummy (col1,col2) SELECT 'aa',one_col FROM another_table;
insert into dummy (col1,col2) SELECT 'bb',another_col FROM another_table;
我想把它们放在一个存储过程中,偶尔运行一次。
唉,我在网上找不到相关的东西。我不想 return 一个值,因此创建一个函数对我来说毫无用处。我认为使用 WITH
无济于事。
如果你有什么线索,我愿意接受。
认真看说明书搞定了
CREATE OR REPLACE FUNCTION my_insert()
returns void AS
$$
BEGIN
insert into dummy (col1,col2) SELECT 'aa',one_col FROM another_table;
insert into dummy (col1,col2) SELECT 'bb',another_col FROM another_table;
END;
$$ language plpgsql
然后输入
执行它
SELECT "my_insert"()
@Dan:感谢踢球。我可以 ! :D
没问题 PL/pgSQL function, but for "a call once in a while" and only plain SQL statements, LANGUAGE sql
是更合适的格式。详细讨论何时使用:
- Difference between language sql and language plpgsql in PostgreSQL functions
CREATE OR REPLACE FUNCTION my_insert()
RETURNS void AS
$func$
WITH sel AS (SELECT one_col, another_col FROM another_table WHERE <some_condition>)
, ins1 AS (INSERT INTO dummy (col1,col2) SELECT 'aa', one_col FROM sel)
INSERT INTO dummy (col1,col2) SELECT 'bb', another_col FROM sel;
$func$ LANGUAGE sql
CTEs 由于从第一个 SELECT
开始实现集,因此可能会更昂贵一些 - 或者不是,如果这实际上节省了多次选择行的时间,例如单独的 INSERT
语句会。
您可能希望同一批中的所有 INSERT
语句都基于同一个快照。如果可以 并发写入操作 ,CTE 将保证这一点,因为整个查询基于所有相关表的 相同快照 。
如果并发不是问题并且 SELECT
很便宜(或不一样),简单、单独的 INSERT 可能会更快。
我有几个如下的插入请求:
insert into dummy (col1,col2) SELECT 'aa',one_col FROM another_table;
insert into dummy (col1,col2) SELECT 'bb',another_col FROM another_table;
我想把它们放在一个存储过程中,偶尔运行一次。
唉,我在网上找不到相关的东西。我不想 return 一个值,因此创建一个函数对我来说毫无用处。我认为使用 WITH
无济于事。
如果你有什么线索,我愿意接受。
认真看说明书搞定了
CREATE OR REPLACE FUNCTION my_insert()
returns void AS
$$
BEGIN
insert into dummy (col1,col2) SELECT 'aa',one_col FROM another_table;
insert into dummy (col1,col2) SELECT 'bb',another_col FROM another_table;
END;
$$ language plpgsql
然后输入
执行它SELECT "my_insert"()
@Dan:感谢踢球。我可以 ! :D
没问题 PL/pgSQL function, but for "a call once in a while" and only plain SQL statements, LANGUAGE sql
是更合适的格式。详细讨论何时使用:
- Difference between language sql and language plpgsql in PostgreSQL functions
CREATE OR REPLACE FUNCTION my_insert()
RETURNS void AS
$func$
WITH sel AS (SELECT one_col, another_col FROM another_table WHERE <some_condition>)
, ins1 AS (INSERT INTO dummy (col1,col2) SELECT 'aa', one_col FROM sel)
INSERT INTO dummy (col1,col2) SELECT 'bb', another_col FROM sel;
$func$ LANGUAGE sql
CTEs 由于从第一个 SELECT
开始实现集,因此可能会更昂贵一些 - 或者不是,如果这实际上节省了多次选择行的时间,例如单独的 INSERT
语句会。
您可能希望同一批中的所有 INSERT
语句都基于同一个快照。如果可以 并发写入操作 ,CTE 将保证这一点,因为整个查询基于所有相关表的 相同快照 。
如果并发不是问题并且 SELECT
很便宜(或不一样),简单、单独的 INSERT 可能会更快。