Redshift 中的程序 Return "SELECT query has no destination for result data" 错误

Procedure in Redshift Return "SELECT query has no destination for result data" Error

我在调用此测试过程时不断收到“SELECT 查询没有结果数据的目的地”错误。我究竟做错了什么?我确实尝试在 SELECT 语句之前添加 RETURN() 命令,但这也不起作用。

CREATE OR REPLACE PROCEDURE SchemaName.SP_Testing_Creating_Procedure (OUT ColumnName VARCHAR(9)) 
AS $$  
BEGIN   
 SELECT TOP 10 ColumnName FROM SchemaName.TableName where ColumnName is not null;     
END;
$$
LANGUAGE plpgsql; 

CALL SchemaName.SP_Testing_Creating_Procedure();

您的过程是 运行 一个 SELECT 命令,但它没有对结果做任何事情。

如果您的目的是 return 结果集,则需要将数据放入 OUT 列。

参见:Returning a result set - Amazon Redshift

正如 John 提到的,您需要将结果放入 OUT 列,使用 IN, OUT and INOUT 参数的示例您可以找到 here

但是如果你需要return几行作为结果,你必须使用refcursor 正如所描述的那样 here

CREATE OR REPLACE PROCEDURE SchemaName.SP_Testing_Creating_Procedure (INOUT result refcursor)
AS $$
BEGIN
    OPEN result FOR
    SELECT TOP 10 ColumnName
    FROM SchemaName.TableName
    WHERE ColumnName IS NOT null;
END;
$$
LANGUAGE plpgsql;

然后就可以在事务中调用存储过程了

BEGIN;
CALL logs.SP_Testing_Creating_Procedure('mycursor');
FETCH ALL FROM mycursor;
COMMIT;

另一个选项是 temp table 上面的文档中也有描述