Teradata存储过程,其中包含从R脚本调用的动态参数

时间:2016-04-25 16:08:22

标签: sql r stored-procedures teradata

我需要从Teradata中提取一些数据以在R中处理。我有大约84个Dep / sec键,其中大多数具有不同的时间跨度,所以我的想法是在Teradata中创建一个将接受Dep的存储过程,秒和日期作为参数。然后我可以循环遍历R中的列表,每次都调用SP来创建我的数据集。

我创建的用于测试这个想法的SP是一个非常简单的,但是我无法让它工作。

CREATE PROCEDURE procTest4 (IntN integer)
BEGIN
CALL DBC.SysExecSQL('SELECT top' || IntN || '*
from TableName');
END;

Teradata确实创建了SP,但我不知道如何执行它并将参数传递给它。当我尝试:     调用procText4(10) 我收到以下错误:

5568:存储过程中不支持SQL语句。

对我来说唯一的另一个选择是在R中创建SQL字符串,然后从那里运行它,但是有多个SQL传递创建易失性表,而RODBC包似乎不喜欢它们,加上它& #39;这是一种非常混乱的方式。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

使用动态SQL从存储过程返回结果集的语法有点复杂:

CREATE PROCEDURE procTest4 (IntN INTEGER)
DYNAMIC RESULT SETS 1
BEGIN
   DECLARE SqlStr VARCHAR(1000);
   DECLARE rslt CURSOR WITH RETURN ONLY FOR stmt;
   SET SQLStr = 'SELECT top ' || IntN || ' * from TableName';
   PREPARE stmt FROM SqlStr;
   OPEN rslt;
END;

但你应该仔细检查一下你是否可以改写那些循环......