首页 > 解决方案 > Teradata 存储过程变量

问题描述

我正在尝试创建一个存储过程来创建表与其自身的所有可能组合。现在,我得到了这段代码,但它会产生以下错误:

语法错误:预期在单词“A”和整数“2”之间

代码:

CREATE MULTISET TABLE PRUEBA
(
    CAMPO VARCHAR(10)
);

INSERT INTO PRUEBA VALUES('A');
INSERT INTO PRUEBA VALUES('B');
INSERT INTO PRUEBA VALUES('C');

REPLACE PROCEDURE TEST()

BEGIN
   DECLARE a VARCHAR(255);
   DECLARE b VARCHAR(225);
   DECLARE qry VARCHAR(255);
   DECLARE i INT;
   DECLARE n INT;

   SET a = 'SELECT * FROM PRUEBA A1 ';
   SET b = ' WHERE ';
   SET n = 3;
   SET i = 1;

   WHILE i < n DO
      BEGIN
         CASE i
         WHEN 1 THEN
            SET qry = a;
         WHEN 2 THEN
            SET a = a || 'CROSS JOIN PRUEBA A' || i ; -- Error in this part.
            SET b = b || 'A' || (i-1) || '.CAMPO < A' || i || '.CAMPO';
            SET qry = a || b;
         ELSE
            SET a = a || 'CROSS JOIN PRUEBA A' || i ;
            SET b = b || 'AND A' || (i-1) || '.CAMPO < A' || i || '.CAMPO';
            SET qry = a || b;
         END CASE;
         SET i = i + 1;
      END;
   END WHILE;
   EXECUTE IMMEDIATE qry;
END;

CALL TEST();

我会加入“i”变量来为所有交叉表创建多个别名。

标签: sqlvariablesstored-proceduresteradatateradata-sql-assistant

解决方案


如果您使用的是 bteq,您可能必须将过程写入文件并使用 .compile 指令加载它。一旦你登录并假设文件是​​ /tmp/stored_procedure.sql 像这样编译它: .compile file='/tmp/stored_procedure.sql';


推荐阅读