【问题标题】:Simple teradata stored procedure简单的 teradata 存储过程
【发布时间】:2012-07-26 10:50:55
【问题描述】:

对于应该很常见的东西,网络似乎有点缺乏工作示例。 “给我一些记录”的简单简示例。这是我的第一个存储过程,我只想查看一些记录。怎么这么难翻? ;-) 我想如果我能得到一个有效的例子,我可以从那里把它调整成我可以真正使用的东西。这是我在网上找到的另一个例子。无法编译,因为 CURSOR 声明是某种语法错误。

CREATE PROCEDURE "SCHEMA"."GETRESULTSET (
    IN "p1" VARCHAR(30))
DYNAMIC RESULT SETS 1
BEGIN       
DECLARE CURSOR cur1 WITH RETURN ONLY TO CLIENT FOR 
 SELECT partitioninfo FROM SCHEMA.SessionInfo where username = p1;    
  OPEN cur1;    
END;

无论如何,当然可以使用线索。我看到了一个示例,其中 CURSOR 与 SQL 分开声明,但是没有一个示例说明如何将变量声明为 VARCHAR 时将其放入 SQL 中。我正在处理的例子已经很老了,但它是我能找到的最好的。

【问题讨论】:

    标签: stored-procedures cursor resultset teradata


    【解决方案1】:

    Teradata MACRO 将是您所描述的更好的解决方案。

    REPLACE MACRO [MyDB].GetResultSet(p1 VARCHAR(30)) AS (
    SELECT "Partition"
      FROM DBC.SessionInfo
     WHERE UserName = :p1;
    );
    
    EXEC MyDB.GetResultSet
    

    虽然存储过程可用于完成其他流行数据库系统(Oracle、SQL Server 等)中使用的基于任务游标的逻辑,但在 Teradata 中可能会导致不良的编程习惯。通常,在 Teradata 中处理大型游标会降低性能。您在其他 DBMS 中使用过游标的许多事情最好尽可能使用基于 SET 的逻辑来完成。

    也就是说,游标可以在 Teradata 中成功用于执行某些需要条件逻辑或动态 SQL 处理的任务。我希望这会有所帮助,如果您有更具体的示例,您需要帮助,我很乐意提供一些建议。

    编辑: 您的程序的此 DDL 适用于 Teradata 13.10:

    CREATE PROCEDURE "SCHEMA"."GETRESULTSET" (
        IN "p1" VARCHAR(30))
    DYNAMIC RESULT SETS 1
    BEGIN       
    DECLARE cur1 CURSOR WITH RETURN ONLY TO CLIENT FOR 
     SELECT "Partition" FROM "SCHEMA".SessionInfo where username = p1;    
      OPEN cur1;    
    END;
    

    光标名称必须在 CURSOR 关键字之后。 PartitionInfo 不是 DBC.SessionInfo 上的有效列。不确定“Schema”是否被 MyBatis 取代,因此您可能需要调整 SELECT 语句。

    【讨论】:

    • 糟糕,我的错。我应该更清楚我的目标。这个想法是想出一个返回记录集的存储过程,以便我们以后可以针对 MyBatis 测试返回记录集的存储过程,以获得概念证明。嗯……虽然添加测试用例可能会很有趣。 Mybatis 可以调用宏吗?好问题。
    • 密歇根州大急流城?我最初来自密歇根州戴维森。 :-)
    • :) - 小世界。有关针对 Teradata 13.10 运行的存储过程的测试版本,请参阅我的编辑。在我的测试副本中,我将“SCHEMA”.SessionInfo 替换为“DBC”.SessionInfo。
    • 是的,我也想通了,但没有时间更新示例。向你致敬。 :-)
    猜你喜欢
    • 2020-06-04
    • 2020-02-23
    • 1970-01-01
    • 2019-10-04
    • 2016-05-31
    • 2015-02-14
    • 2015-07-16
    • 2020-09-25
    • 2011-08-31
    相关资源
    最近更新 更多