【问题标题】:Teradata Dynamic Insert - Looped?Teradata 动态插入 - 循环?
【发布时间】:2019-03-28 03:53:35
【问题描述】:

我正在做的事情与 dnoeth 对这个问题的第二条评论非常相似:

Insert Into table Teradata dynamic stored procedure SQL

我需要多次运行它来循环相同的插入语句,但“?”的值不同。我不知道该怎么做。

我的版本中的动态值是日期跨度。我无法在不进行后台处理的情况下运行大量插入,因此我将数据分成段。

谢谢。

【问题讨论】:

  • 您需要使用光标。定义一个游标并将日期值存储在游标变量中并循环游标。那应该可以解决您的问题。
  • 我建议您尝试找出您正在假脱机的原因,或者查看 TPT 或 FastLoad。
  • 是的,光标听起来像是解决方案。问题是我不确定 EXECUTE 部分在游标中的样子。如何重复使用 PREPARE 中的相同对象?

标签: sql teradata


【解决方案1】:

威廉,

正如您所知,您需要使用光标来遍历要处理的每个值。

为此,将动态创建的 INSERT 语句存储到变量中。

最后一步:使用EXECUTE IMMEDIATE 命令运行存储在 teradata 变量中的插入语句

这是您可以参考的工作示例

REPLACE PROCEDURE td_user.sp_dynamic_insert( OUT proc_msg VARCHAR(5000) )
BEGIN

DECLARE lv_insert_txt      VARCHAR(20000);

DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN          
/* Error handling code if required */
END;

L0: 
FOR insert_cursor AS select_list
CURSOR FOR    
    SELECT Col2 
    FROM   test_1

DO  
   SET lv_insert_txt = 'INSERT INTO test_2(Col1,Col2) VALUES('||TRIM(insert_cursor.Col2)||','||TRIM(insert_cursor.Col2)||')';


   EXECUTE IMMEDIATE lv_insert_txt;
END FOR L0;

SET proc_msg = 'Procedure completed successfully';
END;

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 2016-08-20
    • 1970-01-01
    • 2013-11-23
    • 2016-01-17
    • 2013-12-16
    • 1970-01-01
    • 2012-11-24
    • 2015-08-28
    相关资源
    最近更新 更多