Teradata 问题。那么目标表将从源表中获取CustomerID和CustomerName,而最后一个字段SQL\u RESULT将从存储在源表中的SQL语句中获取结果?这意味着源表中的SQL Query字段中保存的SQL语句将只生成一条带有单个字段的记录,对吗?表中有

Teradata 问题。那么目标表将从源表中获取CustomerID和CustomerName,而最后一个字段SQL\u RESULT将从存储在源表中的SQL语句中获取结果?这意味着源表中的SQL Query字段中保存的SQL语句将只生成一条带有单个字段的记录,对吗?表中有,teradata,Teradata,问题。那么目标表将从源表中获取CustomerID和CustomerName,而最后一个字段SQL\u RESULT将从存储在源表中的SQL语句中获取结果?这意味着源表中的SQL Query字段中保存的SQL语句将只生成一条带有单个字段的记录,对吗?表中有select语句或insert语句吗?表中有存储的SQL语句。在多个列中?你能分享这个表格的布局和一些样本数据吗?我猜光标在这个表中循环并动态执行这些语句就可以了。@Andrew:是的,我在表中有SELECT语句。我想运行这些sql查询并用查询



问题。那么目标表将从源表中获取CustomerID和CustomerName,而最后一个字段
SQL\u RESULT
将从存储在源表中的SQL语句中获取结果?这意味着源表中的
SQL Query
字段中保存的SQL语句将只生成一条带有单个字段的记录,对吗?表中有select语句或insert语句吗?表中有存储的SQL语句。在多个列中?你能分享这个表格的布局和一些样本数据吗?我猜光标在这个表中循环并动态执行这些语句就可以了。@Andrew:是的,我在表中有SELECT语句。我想运行这些sql查询并用查询结果填充另一个表。@JNevill:sql语句只存储在表的一列中。例如:带有查询的表类似于此CustomerID CustomerName SQL查询“101”“Xi Houng”选择MAX(ORDR_AMT)作为来自客户销售的MAX_ORDR_AMT,其中ORDR_DT=''01-03-2017''102''Fran Lombard''选择MAX(PAY_DT)由于CUST_TRANS的MAX_PAY_DT,其中ORDR_ID=''TS9821'',并且目标表看起来像CustomerID CustomerName SQL_RESULT,所以我在Teradata存储过程方面没有太多经验。请帮助我如何实现目标表中填充的结果。建议我如何解决这个问题。那么目标表将从源表中获取CustomerID和CustomerName,最后一个字段
SQL\u RESULT
将从存储在源表中的SQL语句中获取结果?这意味着在源表的
SQL Query
字段中保存的SQL语句将只生成一条带有单个字段的记录,对吗?感谢您提供此解决方案。我在您开发时创建了存储过程。我无法理解SQL语句如何运行以及如何在sqlResults中获得结果。我想知道“PREPARE S1 FROM sqlQuery;”是如何从查询中获取结果的。
sqlQuery
是一个varchar/字符串,它使用SQL语句填充第一个游标(从表中)中的记录。我们创建了一个从语句
S1
创建的游标
S1
是根据
sqlQuery
中的sql语句“准备”的。一旦该语句被“准备好”,我们就可以打开
C1
光标,并用
sqlQuery
字符串中与
s1
语句相对应的记录填充它。为了动态执行存储在列中的sql语句,需要进行大量的跳转。sqlQuery列中的某些行是空的。当游标尝试执行它时,它将无法获取SQL结果。我不知道cursor中跳转到NULL sqlQuery列的逻辑应该是什么。我将使用WHERE语句(如
WHERE sqlQuery NOT NULL
)调整用于加载
source\u table\u cursor
游标的SQL查询,以避免这些记录进入游标。或者,您可以在游标的循环中添加一个IF语句进行检查(但这将比WHERE解决方案更昂贵)。感谢您提供此解决方案。我在您开发时创建了存储过程。我无法理解SQL语句如何运行以及如何在sqlResults中获得结果。我想知道“PREPARE S1 FROM sqlQuery;”是如何从查询中获取结果的。
sqlQuery
是一个varchar/字符串,它使用SQL语句填充第一个游标(从表中)中的记录。我们创建了一个从语句
S1
创建的游标
S1
是根据
sqlQuery
中的sql语句“准备”的。一旦该语句被“准备好”,我们就可以打开
C1
光标,并用
sqlQuery
字符串中与
s1
语句相对应的记录填充它。为了动态执行存储在列中的sql语句,需要进行大量的跳转。sqlQuery列中的某些行是空的。当游标尝试执行它时,它将无法获取SQL结果。我不知道cursor中跳转到NULL sqlQuery列的逻辑应该是什么。我将使用WHERE语句(如
WHERE sqlQuery NOT NULL
)调整用于加载
source\u table\u cursor
游标的SQL查询,以避免这些记录进入游标。或者,您可以在游标的循环中添加一个IF语句来进行检查(但这将比WHERE解决方案更昂贵)。
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