选择要从 Teradata 的存储过程中输出的变量

Rus*_*960 1 teradata

我有一个已开始编码的存储过程,需要返回一个值。在 SQL Server 中,我只需对变量执行 SELECT 操作即可返回它。然而,这似乎不适用于 Teradata,并且没有找到有关如何执行此操作的类似示例。这是我的存储过程:

REPLACE PROCEDURE sp_Get_MyValue()
BEGIN
DECLARE mytestvar  VARCHAR(40);
SELECT mycolumn INTO mytestvar FROM MyTable;
SELECT mytestvar;
END;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

语句 2:替换失败。失败 [5526 : HY000] 由于错误,未创建/替换存储过程。{嵌套失败消息 [5526 : HY000] SPL1045:E(L10),INTO 子句无效或缺失。}

我还尝试向过程中添加 OUT 变量,但这也不起作用:

REPLACE PROCEDURE sp_Get_MyValue(mytestvarout VARCHAR(40))
BEGIN
DECLARE mytestvar  VARCHAR(40);
SELECT mycolumn INTO mytestvar FROM MyTable;
END;
Run Code Online (Sandbox Code Playgroud)

出现此错误:

作为单个语句执行。失败 [5531:HY000] 过程的参数不支持命名列表。已用时间 = 00:00:00.079

dno*_*eth 6

要返回单行,您必须定义 OUT 变量并为其赋值:

REPLACE PROCEDURE sp_Get_MyValue(OUT mytestvarout VARCHAR(40))
BEGIN
  DECLARE mytestvar  VARCHAR(40);
  SELECT mycolumn INTO mytestvar FROM MyTable;
  SET mytestvarout = mytestvar;
END;
Run Code Online (Sandbox Code Playgroud)

要返回结果集,您需要定义一种虚拟游标(归咎于标准 SQL :-)

从存储过程返回结果集