Teradata将计数插入变量

时间:2018-02-07 15:08:04

标签: teradata

描述我想做的事情:

我有2个环境,一个有数据(X)第二个没有数据(Y)。

我已经完成了具有输入参数P_TableName的过程。它应检查此表中是否有任何数据和IF然后我们将数据带到Y环境。

所以它大部分都有效,但我有一个简单的事情有问题(我在TD方面没有多少经验,但在Oracle中它将是10秒)。

我需要将选择计数(*)从X传递给变量怎么做?。

我在尝试使用SET VAR = SELECT ... 插入VAR SELECT ... 我试图为直接执行的语句创建一个变量

        SET v_sql_stmt = 'INSERT INTO ' || VAR|| ' SELECT COUNT(*) FROM ' || P_TableName;
        CALL DBC.SYSEXECSQL(v_sql_stmt);

这可能是非常简单的事情,但我找不到好的解决方案。请帮忙

2 个答案:

答案 0 :(得分:1)

您必须打开游标才能获取结果,因为您正在运行动态SQL。 Teradata help doc on Dynamic SQL中有一个很好的例子:

CREATE PROCEDURE GetEmployeeSalary
(IN EmpName VARCHAR(100), OUT Salary DEC(10,2))
BEGIN
  DECLARE SqlStr VARCHAR(1000);
  DECLARE C1 CURSOR FOR S1;
  SET SqlStr = 'SELECT Salary FROM EmployeeTable WHERE EmpName = ?';
  PREPARE S1 FROM SqlStr;
  OPEN C1 USING EmpName;
  FETCH C1 INTO Salary;
  CLOSE C1;
END;

答案 1 :(得分:1)

您无法在Teradata中的动态SQL中使用INTO

作为一种解决方法,您需要执行返回单行的游标:

DECLARE cnt BIGINT;
DECLARE cnt_cursor CURSOR FOR S;
SET v_sql_stmt = ' SELECT COUNT(*) FROM ' || P_TableName;
PREPARE S FROM v_sql_stmt;
OPEN cnt_cursor;
FETCH cnt_cursor INTO cnt; 
CLOSE cnt_cursor;