Sql 动态游标和WHERE子句Teradata
我试图编写一个过程,其中数据库名是动态的,并且取自where子句。 到目前为止,我已经做到了:Sql 动态游标和WHERE子句Teradata,sql,parameters,cursor,teradata,Sql,Parameters,Cursor,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 '; P
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
做什么,但这应该会让你明白。基本上,您只需要编写一条sql语句,使您的dbname
变量成为变量,然后在第二次查询中使用它。您想这样做吗?非常感谢,这非常有用:)