在为Teradata的存储过程中存储动态sql时遇到麻烦

问题描述 投票:0回答:1

我在存储过程中具有以下动态sql代码。通过传递下面列出的不同参数,我可以得到不同的结果。有人可以帮助我吗,更改您想要的任何内容,但请确保它可以传递这些参数。非常感谢!

    CREATE PROCEDURE DV_CIMAUSER_DB.spDataValidationDynamicSQL ( 
    sourceDB VARCHAR(255),
    sourceDate VARCHAR(255), 
    sourceColumn VARCHAR(255), 
    sourceTable VARCHAR(255), 
    destinationDB VARCHAR(255), 
    destinationDate VARCHAR(255), 
    destinationColumn VARCHAR(255), 
    destinationTable VARCHAR(255) 
) 
DYNAMIC RESULT SETS 1
BEGIN
    DECLARE SqlStr VARCHAR(2000);
    DECLARE C1 CURSOR FOR S1;
    SET SqlStr = 
    'SELECT a.EVENT_DATE, a.source_value, b.destination_value
    FROM (
        SELECT CAST('||sourceDate||' AS DATE format ''YYYY-MM-DD'') AS EVENT_DATE, CAST(SUM('||sourceColumn||') AS DECIMAL(38, 2)) AS source_value
        FROM '||sourceDB||'.'||sourceTable||'
        GROUP BY EVENT_DATE
    ) AS a
    FULL OUTER JOIN (
        SELECT '||destinationDate||', CAST(SUM('||destinationColumn||') AS DECIMAL(38, 2)) AS destination_value
        FROM '||destinationDB||'.'||destinationTable||'
        GROUP BY EVENT_DATE
    ) AS b
    ON a.EVENT_DATE = b.EVENT_DATE
    WHERE a.source_value <> b.destination_value OR a.source_value IS NULL OR b.destination_value IS NULL
    ORDER BY a.EVENT_DATE';
    PREPARE S1 FROM SqlStr; 
    OPEN C1 USING sourceDB, sourceDate, sourceColumn, sourceTable, destinationDB, destinationDate, destinationColumn, destinationTable;
    CLOSE C1;
END;

并且我使用CALL DV_CIMAUSER_DB.spDataValidationDynamicSQL ('PD_CIMAPROD_VMDB', 'timeperiod', 'IMPRESSIONS', 'BASE_PS_BING', 'PD_CIMAPROD_VMDB', 'EVENT_DATE', 'IMPRESSIONS', 'BASE_PS_BING');

并且我收到以下错误:enter image description here

没有存储过程中的动态sql,我有权选择timeperiod中的PD_CIMAPROD_VMDB.BASE_PS_BING列。因此,我不知道存储过程中什么时候出错。有人可以帮我提供代码吗?非常感谢!

stored-procedures teradata dynamic-sql
1个回答
0
投票

您是否要在与执行常规选择查询的用户相同的用户下创建过程?

如果不是,那么您在其下创建过程的用户很可能具有不同的权限集,并且无权访问PD_CIMAPROD_VMDB。

默认情况下,过程从创建它的用户那里继承了一组权限。

为了使过程继承创建它的用户的权限,必须在过程主体中指定“ SQL安全调用程序”(https://docs.teradata.com/reader/scPHvjfglIlB8F70YliLAw/bnfuLvcCbLoSyrgiu~_j_w

© www.soinside.com 2019 - 2024. All rights reserved.