Teradata SQL中FOR循环报错求助:排查3706语法错误原因
Teradata SQL FOR循环报错的原因及解决方法
你遇到的3706语法错误,核心原因是Teradata的游标FOR循环属于过程化SQL(PSQL)语法,不能直接作为独立SQL语句执行,必须包裹在存储过程、宏或者用户定义函数这类包含程序块结构的对象中。
忽略的关键要点
- Teradata的
FOR游标循环不是普通交互式SQL的一部分,只能在PSQL程序块(BEGIN...END)内使用,而程序块必须依附于存储过程、宏等对象 - 所有用到的变量必须提前用
DECLARE声明,且变量类型要和对应表字段的类型匹配
修正后的代码示例
官方示例改为存储过程版本
CREATE PROCEDURE DeleteCustomer() BEGIN -- 声明变量,类型需匹配Customer表的字段类型 DECLARE hCustNbr INTEGER; DECLARE hCustName VARCHAR(100); FOR CustCursor AS c_customer CURSOR FOR SELECT CustomerNumber, CustomerName FROM Customer DO SET hCustNbr = CustCursor.CustomerNumber; SET hCustName = CustCursor.CustomerName; DELETE FROM Customer WHERE CURRENT OF c_customer; END FOR; END;
调用存储过程执行:
CALL DeleteCustomer();
你的测试代码改为存储过程版本
CREATE PROCEDURE QueryCustomerOffer() BEGIN -- 声明变量,类型需匹配Customer_Offer表的字段类型 DECLARE cust VARCHAR(50); DECLARE o VARCHAR(50); FOR CustCursor AS c_customer CURSOR FOR SELECT Customer, Offer FROM Customer_Offer DO SET cust = CustCursor.Customer; SET o = CustCursor.Offer; SELECT cust, o FROM Customer_Offer WHERE CURRENT OF c_customer; END FOR; END;
调用存储过程执行:
CALL QueryCustomerOffer();
内容的提问来源于stack exchange,提问作者Jero
相关产品推荐
相关产品推荐

