对于表中的行,将行保存在临时表中以在 plpgsql 的选择查询中使用其数据

Posted

技术标签:

【中文标题】对于表中的行,将行保存在临时表中以在 plpgsql 的选择查询中使用其数据【英文标题】:for row in table , save the row in temporary table to use its data in select query in plpgsql 【发布时间】:2018-10-03 15:58:50 【问题描述】:

我想做这样的事情,但不确定用于在表上迭代for循环数据类型记录的行变量是否可以是插入到同一个 for 循环本身内的临时表中

CREATE OR REPLACE FUNCTION LoopThroughTable() 
RETURNS VOID 
AS
$$
DECLARE 
t_row record;
BEGIN
   FOR t_row in SELECT * FROM the_table
      LOOP
      create temp table tmp as (select * from t_row); --- is this possible??
      --- use the data of tmp table in some select query
      drop table tmp; -- is this possible??
      END LOOP;
END;
$$ 
LANGUAGE plpgsql;

如果可能的话,有人可以帮助我正确的语法吗?

【问题讨论】:

【参考方案1】:

想通了!

以防万一有人偶然发现这篇文章,访问 t_row 记录 类数据的有效方法是:

CREATE OR REPLACE FUNCTION LoopThroughTable() 
RETURNS VOID 
AS
$$
DECLARE 
   t_row record;
BEGIN
   FOR t_row in SELECT * FROM table_1
       LOOP
          SELECT * FROM table_2 when A= t_row.B 
          -- where A is a column in table_2 whose value should be equal to column B in t_row (which single row from table_1) 
       END LOOP;
END;
$$ 
LANGUAGE plpgsql;

【讨论】:

以上是关于对于表中的行,将行保存在临时表中以在 plpgsql 的选择查询中使用其数据的主要内容,如果未能解决你的问题,请参考以下文章

将行从一个表插入到另一个表中,哪个 sql 更有效(外连接 vs 顺序扫描)

MySQL - 如何更改表中的行顺序

如何使用 jQuery 将行追加到表中?

SSIS 2012 - 插入新行,忽略现有行

跳出查询以在存储过程中从单独的表中获取 where 子句

如何从MS SQL Server 2012中的不同表中减去连续的行?