我最近发现RedShift支持CURSOR,更具体地说它支持命令:DECLARE& FETCH。 我设法创建了一个游标并获取了一些行,但没有找到方法:
我没有在亚马逊上找到关于如何做到这一点的任何文档,是否有人知道这是否可能?感谢。
答案 0 :(得分:1)
您可以通过创建支持变量的存储过程来轻松实现此目的。您可以读取遍历它的数据集并执行逻辑。
以下示例显示了带有输出参数的过程。参数是输入(IN),输入和输出(INOUT)和输出(OUT)。
CREATE OR REPLACE PROCEDURE test_sp2(f1 IN int,
f2 INOUT varchar(256), out_var OUT varchar(256))
AS $$
DECLARE
loop_var int;
BEGIN
IF f1 is null OR f2 is null THEN
RAISE EXCEPTION 'input cannot be null';
END IF;
DROP TABLE if exists my_etl;
CREATE TEMP TABLE my_etl(a int, b varchar);
FOR loop_var IN 1..f1 LOOP
insert into my_etl values (loop_var, f2);
f2 := f2 || '+' || f2;
END LOOP;
SELECT INTO out_var count(*) from my_etl;
END;
$$ LANGUAGE plpgsql;
call test_sp2(2,'2019');
f2 | column2
---------------------+---------
2019+2019+2019+2019 | 2
(1 row)
源-https://docs.aws.amazon.com/redshift/latest/dg/stored-procedure-create.html
答案 1 :(得分:0)
Redshift没有变量。使用INSERT INTO ... SELECT
更轻松,更快地插入另一个表。
如果我了解您的第二个用例,那么我不知道任何支持该行为的关系数据库。您可以在创建游标时对其进行过滤,但是一旦创建,您的选择就是获取下一行或关闭游标。如果您需要过滤,则可以DECLARE
新建一个光标。