0

我在 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;

我认为问题在于一些语法细节或其他东西。

有人可以指导我吗?

4

0 回答 0