2012-07-27 66 views
1

网络似乎有点短,应该是相当常见的东西的工作示例。简单的简单例子“给我一些记录”。这是我第一次存储过程,我只想看一些记录。为什么这么难以翻转? ;-)我认为,如果我能得到一个有效的例子,我可以从那里调整到我真正可以使用的东西。这来自我在网上找到的另一个例子。不会编译,因为CURSOR声明是某种语法错误。简单的teradata存储过程

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中。我正在努力工作的例子非常老,但这是我能找到的最好的例子。

回答

1

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

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

EXEC MyDB.GetResultSet 

虽然存储过程可以用来完成其他流行的数据库系统(甲骨文,SQL Server等)使用的任务光标基于逻辑可导致不良Teradata的编程习惯。通常,在Teradata中处理大型游标会降低性能。在其他数据库管理系统中使用光标所提供的许多功能都可以在基于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上的有效列。不知道“架构”是否被MyBatis取代,所以你可能不得不调整SELECT语句。

+0

哎呀,我的坏。我应该更清楚我的目标。我们的想法是创建一个存储过程,该存储过程返回一个记录集,以便我们稍后可以测试存储过程,该存储过程返回针对MyBatis的记录集以获得概念验证。嗯......这可能是有趣的,但添加测试用例。 Mybatis可以称为宏吗?好问题。 – user447607 2012-07-28 13:04:52

+0

大急流城,密歇根州?我最初来自密歇根州的戴维森。 :-) – user447607 2012-07-28 13:10:20

+0

:) - 小世界。查看我的编辑,查看Teradata 13.10的存储过程的测试版本。在我测试的副本中,我用“DBC”.SessionInfo替换了“SCHEMA”.SessionInfo。 – 2012-07-28 14:29:26