从Teradata

时间:2017-10-17 16:52:15

标签: teradata

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

REPLACE PROCEDURE sp_Get_MyValue()
BEGIN
DECLARE mytestvar  VARCHAR(40);
SELECT mycolumn INTO mytestvar FROM MyTable;
SELECT mytestvar;
END;

我收到此错误:

  

声明2:REPLACE失败。失败[5526:HY000]存储过程   由于错误而未创建/替换。{Nested Failure Msg [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;

出现此错误:

  

作为单一陈述执行。失败[5531:HY000]命名列表不是   支持程序的参数。经过时间= 00:00:00.079

1 个答案:

答案 0 :(得分:3)

要返回单行,您必须定义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;

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

Returning Result Sets from a Stored Procedure