如何在Teradata中编写存储过程实现两表关联查询并输出到临时表
Teradata 16.20 存储过程实现关联查询结果写入临时表方案
完整可运行存储过程代码
REPLACE PROCEDURE GetBookStockPriceInfo() BEGIN -- 1. 先删除已存在的会话级临时表,避免重复创建报错 BEGIN DECLARE TABLE_NOT_EXISTS EXCEPTION FOR SQLSTATE '42000'; DECLARE EXIT HANDLER FOR TABLE_NOT_EXISTS BEGIN -- 捕获表不存在的异常,不做处理继续执行 END; CALL DBC.SysExecSQL('DROP TABLE book_price_temp;'); END; -- 2. 创建会话级临时表,结构与查询结果匹配 CREATE VOLATILE TABLE book_price_temp ( bookid INT, unitprice DECIMAL(18,2) ) PRIMARY INDEX(bookid) ON COMMIT PRESERVE ROWS; -- 提交后保留数据,会话结束自动删除表 -- 3. 执行关联查询,将结果写入临时表 INSERT INTO book_price_temp SELECT books.bookid, bookmetadetails.unitprice FROM books JOIN bookmetadetails ON books.bookid = bookmetadetails.bookid AND bookmetadetails.stockavailability = 0; END;
使用说明
- 执行上述SQL完成存储过程创建后,调用即可运行完整逻辑:
CALL GetBookStockPriceInfo(); - 调用完成后直接查询临时表即可获取结果:
SELECT * FROM book_price_temp;
注意事项
- 上述代码使用VOLATILE会话级临时表,仅当前连接会话可见,会话断开后表和数据会自动清理,无需手动维护
- 若需跨会话访问临时结果,可将
VOLATILE TABLE替换为GLOBAL TEMPORARY TABLE,其余逻辑不变 - 若需要持久化存储结果,直接将临时表创建语句替换为普通永久表创建语句即可,需确保当前账号有对应库的建表权限
- 表字段类型请根据你实际业务中
books.bookid和bookmetadetails.unitprice的真实类型调整,避免类型不匹配报错
内容的提问来源于stack exchange,提问作者calmeabid
相关产品推荐
相关产品推荐

