【问题标题】:Select a variable to output from within stored procedure in Teradata在 Teradata 的存储过程中选择要输出的变量
【发布时间】:2018-03-29 10:46:52
【问题描述】:

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

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

我收到此错误:

声明 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;

出现此错误:

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

【问题讨论】:

    标签: teradata


    【解决方案1】:

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

    【讨论】:

    • 我仍然收到此错误:过程的参数不支持命名列表。
    • 你需要用参数名CALL它:CALL sp_Get_MyValue(whatever)(通常你使用实际的变量名而不是whatever
    猜你喜欢
    • 2020-02-23
    • 1970-01-01
    • 2018-04-20
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 2021-08-21
    相关资源
    最近更新 更多