TERADATA SQL,我将SQL语句存储在一个表中。我想用这些SQL语句的结果填充另一个表。每条行和每列的SQL语句都不相同。你能告诉我如何实现它吗?我试图通过存储过程和Shell脚本获得结果。但是,我无法正确编码。TERADATA SQL:通过存储在另一个表中的查询结果填充一个表
回答
这里有一个漂亮的准系统程序,用于解决这个问题。
- 我们使用游标来遍历保存SQL语句
- 我们采用第二光标同时通过第一游标循环动态执行的SQL字符串您的源表:因为它变得有点毛毛并将该SQL查询的结果FETCH到一个变量中。
我会怀疑你会遇到各种各样的错误,而得到这个设置,但我相信这是相当接近的工作过程:
CREATE PROCEDURE <yourdatbase>.MyNewProcedure()
BEGIN
--Declare variables to hold the three fields as we loop through them with the cursor
--You'll need to change these types to match your table's data type so we can fetch
-- them without error inside the cursor loop
DECLARE customerID INT;
DECLARE customerName VARCHAR(50);
DECLARE sqlQUERY as VARCHAR(10000);
DECLARE source_table_cursor CURSOR FOR SELECT customerID, customerName, SQLQuery FROM <yourdatabase>.yoursourcetable FOR READ ONLY;
OPEN source_table_cursor;
looplabel:
LOOP
--We'll need a cursor for a dynamic statement
--And we'll also need an integer to catch your query
--results (Assuming they are all like (Sum(<somefield>) or some
--type of INT
DECLARE C1 CURSOR FOR S1;
DECLARE sqlResults as INT;
FETCH source_table_cursor INTO customerID, customerName, sqlQuery;
--WOAH THERE! Cursor issues something went wrong die die die
IF (SQLSTATE ='02000') THEN
LEAVE label1;
END IF;
--Now that we have a record and a sql statement we will need another cursor
--where we will execute, dynamically, the SQL statement and then fetch the
--single record result to update our target table
PREPARE S1 FROM sqlQuery;
OPEN C1;
FETCH C1 INTO sqlResults;
--Now we can INsert into your target table
INSERT INTO <yourdatabase>.yourtargettable (customerID, customerName SQL_RESULT)
VALUES (customerID, customerName, sqlResults);
CLOSE C1;
END LOOP looplabel;
CLOSE demographic_cursor;
END
感谢您提供此解决方案。 –
我在开发时创建了存储过程。我无法理解SQL语句如何运行并在sqlResults中获取结果。我想知道“PREPARE S1 FROM sqlQuery”;正在从查询中获取结果。 –
'sqlQuery'是一个正在填充第一个游标(从您的表)中的记录的SQL语句的varchar /字符串。我们创建了一个从语句“S1”创建的游标。 'sql'从'sqlQuery'中的sql语句中“准备好”。一旦该语句“准备好”,我们就可以打开“C1”游标,并使用'sqlQuery'字符串中的记录填充's1'语句。为了动态执行存储在列中的sql语句,我们需要花费很多时间。 – JNevill
- 1. 如何将MySQL查询结果存储在另一个表中?
- 2. SQl查询通过另一个表
- 3. 从另一个查询填充表
- 4. Informix SQL /在另一个查询中重用存储过程的结果
- 5. 如何在SQL Server中调用存储过程以从另一个表中填充一个表?
- 6. MS SQL:在另一个查询中使用存储过程结果集?
- 7. 结果SQL查询到一个新表
- 8. SQL查询结果到一个表
- 9. 用另一个查找表填充NaN
- 10. SQL获得从一个查询结果到另一个查询
- 11. 从一个到另一个填充表
- 12. 在另一个查询中使用一个查询的结果
- 13. 如何将BigQuery查询结果保存到另一个表中?
- 14. 有关另一个表的SQL查询结果为空
- 15. 如何在另一个查询(PHP)中使用一个SQL查询的结果
- 16. 填充列表视图与另一个活动的结果
- 17. 使用查询结果在同一个表上获得另一个结果
- 18. 用另一个表中的SQL查询传递执行存储过程?
- 19. 如何在填充另一个表时填充表格?
- 20. 如何在另一个表中存储* sorted * SELECT结果?
- 21. 查询表,然后查询每个结果的另一个表,然后... etc
- 22. SQL查询来从一个表是不是在另一个表
- 23. 对于每个SQL结果,另一个SQL查询?在PHP
- 24. 在一个SQL查询中使用多个SQL查询结果
- 25. SQL查询 - 一个表中的项目列表不在另一个表中
- 26. 改变一个存储过程,包括从另一个存储过程结果/查询
- 27. 从另一个表中创建一个表而不填充它
- 28. 查询表基于另一个表的结果
- 29. 是否有查询选择名称存储在另一个表中的列?
- 30. 存储过程用查询结果集填充变量
你的SELECT语句或在INSERT语句中的表? – Andrew
你有SQL语句存储在一个表中。在多个专栏中?你能分享这个表格的布局和一些样本数据吗?我猜测一个游标循环遍历这个表并动态地执行语句就可以做到这一点。 – JNevill
@Andrew:是的,我在表中有SELECT语句。我想运行这些sql查询并用查询结果填充另一个表。 –