1

对于应该很常见的东西,网络似乎有点缺乏工作示例。“给我一些记录”的简单简示例。这是我的第一个存储过程,我只想查看一些记录。怎么这么难翻?;-) 我想如果我能找到一个有效的例子,我可以从那里将它调整为我可以真正使用的东西。这是我在网上找到的另一个例子。无法编译,因为 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 中。我正在处理的示例已经很老了,但这是我能找到的最好的示例。

4

1 回答 1

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 语句。

于 2012-07-27T18:59:24.543 回答