我在 SQL Server 中有一个简单的光标,我想适应在 Teradata 中使用。
游标的目标是收集一系列表的名称并使用游标逻辑重命名它们。
我已经更改了大部分光标代码以在 Teradata 中使用,但我仍然无法完成此操作。
到目前为止,我有:
DECLARE varTableOldName VARCHAR(500);
DECLARE varTableNewName VARCHAR(500);
DECLARE vardbName VARCHAR(100);
DECLARE varIDCod VARCHAR(5);
DECLARE varRename VARCHAR(100);
DECLARE varCt INT DEFAULT 0;
DECLARE renameTables CURSOR FOR
SELECT
DBname
,TBname
FROM (
SELECT
DatabaseName AS DBname
,TableName AS TBname
,LastAccessTimeStamp AS LADate
,(CURRENT_DATE - CAST(LastAccessTimeStamp AS DATE)) AS NAccessDate
FROM
DBC.TablesV
WHERE
1=1
AND TableKind = 'T'
AND DatabaseName IN ('PD_BACKUP')
GROUP BY
DatabaseName
,TableName
,LastAccessTimeStamp
,LastAlterTimeStamp
) tbHig
WHERE NAccessDate IS NULL OR NAccessDate >= 180
ORDER BY DBname, TBname
FOR READ ONLY;
OPEN renameTables;
FETCH NEXT FROM renameTables
INTO vardbName, varTableOldName;
WHILE (SQLCODE = 0)
DO
SET varTableNewName = vardbName || '_V' || CAST(EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AS VARCHAR(20)) || '_' || CAST(varCt AS VARCHAR(20));
SET varTableOldName = vardbName || '.' || varTableOldName;
SET varRename = 'RENAME TABLE ' || varTableOldName || ' TO ' || varTableNewName;
EXECUTE IMMEDIATE varRename;
SET varCt = varCt + 1;
FETCH NEXT FROM renameTables INTO vardbName, varTableOldName;
END WHILE;
CLOSE renameTables;
我认为问题在于一些语法细节或其他东西。
有人可以指导我吗?