Teradata 动态插入 - 循环?
Teradata Dynamic Insert - Looped?
我正在做的事情与 dnoeth 对这个问题的第二条评论非常相似:
我需要 运行 多次循环相同的插入语句,但“?”的值不同我不知道该怎么做。
我的版本中的动态值是一个日期跨度。我无法在不假脱机的情况下 运行 进行大量插入,因此我将数据分成了多个部分。
谢谢。
威廉,
如您所知,您需要使用游标遍历要处理的每个值。
为此,将动态创建的 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;
我正在做的事情与 dnoeth 对这个问题的第二条评论非常相似:
我需要 运行 多次循环相同的插入语句,但“?”的值不同我不知道该怎么做。
我的版本中的动态值是一个日期跨度。我无法在不假脱机的情况下 运行 进行大量插入,因此我将数据分成了多个部分。
谢谢。
威廉,
如您所知,您需要使用游标遍历要处理的每个值。
为此,将动态创建的 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;