繁体   English   中英

动态游标和WHERE子句Teradata

[英]Dynamic cursors and WHERE clause Teradata

我正在尝试编写一个数据库名称是动态的并且是从where子句获取的过程。 到目前为止,我已经知道了:

CREATE PROCEDURE Test

(IN DBName VARCHAR(100), OUT RowCount DEC(10,2))

BEGIN

DECLARE SqlStr VARCHAR(1000);

DECLARE C1 CURSOR FOR S1;

SET SqlStr = 'SELECT count(*) FROM '|| DBNAME || '.MyTable ';

PREPARE S1 FROM SqlStr;

OPEN C1 USING DBName;

FETCH C1 INTO RowCount;

CLOSE C1;

END;

我现在需要添加如下内容:

WHERE DBName = (SELECT 'firstpart||EnvName||' FROM EnvTable 
WHERE EnvName = (SELECT EnvName FROM EnvTable WHERE Flag = 1 AND Priority = (SELECT MIN(Priority) FROM EnvTable))

有任何想法吗? 我可以在调用该程序时添加它吗?

听起来您只需要一个变量即可使其更加动态:

CREATE PROCEDURE Test

(OUT RowCount DEC(10,2))

BEGIN

    DECLARE SqlStr VARCHAR(1000);
    DECLARE DBName VARCHAR(100);
    DECLARE C1 CURSOR FOR S1;

    /*Get your DBName variable loaded using SELECT INTO*/   
    SELECT 'firstpart' || EnvName INTO DBName
    FROM EnvTable 
    WHERE Flag = 1 AND Priority = (SELECT MIN(Priority) FROM EnvTable);

    /*and continue what you were doing*/
    SET SqlStr = 'SELECT count(*) FROM '|| DBName || '.MyTable ';

    PREPARE S1 FROM SqlStr;

    OPEN C1 USING DBName;

        FETCH C1 INTO RowCount;

    CLOSE C1;

END;

我不确定您要使用firstpart||envname做什么,但这应该可以帮助您。 本质上,您只需要制作一个使您的dbname变量可变的sql语句,然后在第二个查询中使用它即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM