sql - 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”变量来为所有交叉表创建多个别名。
解决方案
如果您使用的是 bteq,您可能必须将过程写入文件并使用 .compile 指令加载它。一旦你登录并假设文件是 /tmp/stored_procedure.sql 像这样编译它: .compile file='/tmp/stored_procedure.sql';
推荐阅读
- javascript - 为什么一个数字的最后2位变成0?
- c - 遍历二维数组
- python - discord.py wait_for 在方法中不起作用
- firebase - 使用 Firebase 电话身份验证、JWT 和 Express Restful API 来规划登录系统?
- swift - 闭包如何捕获值类型?
- html - 在 Angular9 的 mat-table 中,我如何强制 mat-cell 中的 DIV 开始新行?
- javascript - react-hook-form 在使用 mode 属性集键入时离开输入字段
- javascript - React Native Maps - 使标记标注不与地图中的其他文本重叠
- android - iOS WkWebKit 上 Android WebView 的 onLoadResource 之类的功能是什么?
- python - 如何从凌乱的字符串中提取数据框?