首页 > 解决方案 > 具有 2 个表更新的简单 Postgres 过程不起作用

问题描述

我是从 MSSQL 到 PostgreSQL 的程序员。我很难让简单的程序起作用。我确定我错过了一些东西。寻求您的专业知识。

在下面,我正在创建一个永久表 A 和临时表 B。我正在尝试通过对 tableA 和 B 进行连接来更新。出于某种原因

  1. 它希望所有表都可用。我有很大的列列表,所以我选择进入。
  2. 我单独执行了这些语句,并且只有在创建 2 个表时才允许创建过程
  3. 即使在成功创建过程后,当我尝试调用该过程时出现运行时错误

我尝试了 cte,但即便如此,它在 Update 语句中的某处也会出错。这只是我发布的示例代码。谢谢你的时间。

CREATE or replace PROCEDURE "ASG"."loadABC"()

LANGUAGE SQL

AS $$

drop table "tableA";

SELECT "Code", c1, c2, c3
INTO "tableA"
FROM 
(SELECT 1 "Code", 'A' c1, 'B' c2, 'update c' c3
union SELECT 2 "Code", 'A' c1, 'B' c2, 'update c' c3
union SELECT 3 "Code", 'A' c1, 'B' c2, 'update c' c3 
)A
--JOIN other tables not necessary for this now
;


SELECT "Code", c1, c2, c3
INTO TEMPORARY TABLE "tableB"
FROM 
(SELECT 1 "Code", 'A' c1, 'B' c2, 'update c' c3
union SELECT 2 "Code", 'A' c1, 'B' c2, 'update c' c3
union SELECT 3 "Code", 'A' c1, 'B' c2, 'update c' c3 
)B;

update "tableA" A 
set "c3" = b."c2"
from "tableB" b
where 
(A."Code" = b."Code");

drop table "tableB";

$$;

标签: postgresql

解决方案


推荐阅读