我需要从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;这是一种非常混乱的方式。
非常感谢任何帮助。
答案 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;
但你应该仔细检查一下你是否可以改写那些循环......