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
列。
正如 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 上面的文档中也有描述
我在调用此测试过程时不断收到“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
列。
正如 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 上面的文档中也有描述