避免雪花中的存储过程重复

时间:2020-09-15 03:08:56

标签: javascript sql stored-procedures snowflake-cloud-data-platform

我编写了一个存储过程,将值插入表中。但是,当我两次调用存储过程时,重复的值被插入到表中。如何避免存储过程中的值重复。

这是我的存储过程:

CREATE OR REPLACE PROCEDURE get_columns(TABLE_NAME VARCHAR)
RETURNS ARRAY
LANGUAGE JAVASCRIPT
AS
$$
var stmt = snowflake.createStatement({
    sqlText: "SELECT * FROM " + TABLE_NAME + " LIMIT 1;",    
});
stmt.execute();

var cols=[];
for (i = 1; i <= stmt.getColumnCount(); i++) {
  INSERT INTO TABLE1 (Col_Name) VALUES ('+"stmt.getColumnName(i)"+');  //DUPLICATE VALUES
}
return cols
$$;

编辑:

我正在检索Col_table的列名,说(Col1, Col2, Col3),我希望将这些列名放入TABLE1中。

我调用了过程call get_columns(Col_table),并将列名插入到TABLE1中。

当我再次调用过程call get_columns(Col_table)时,TABLE1将具有与(Col1, Col2, Col3, Col1, Col2, Col3)相同的值。我想通过使用合并或更新或任何其他方法来避免重复。

1 个答案:

答案 0 :(得分:2)

基于已修改的问题和评论:

  1. “当我再次调用过程[...]时,TABLE1将具有重复的值[...]。我想通过使用merge或update或任何其他方法来避免重复。”
  1. “当我在两个不同的表列上调用过程时,INSERT OVERWRITE将替换表的行”

然后,如果您不想在现有表中插入重复的值,则可以执行以下操作:

var pokemon = pokemon2[randomNum];

console.log(pokemon);
console.log(pokemon[randomNum]);

res.json(pokemon);

在过程中替换该SQL代码,您将不会看到重复的值。将INSERT INTO TABLE1(Col_Name) SELECT * FROM (SELECT 'i' x) WHERE x NOT IN (SELECT Col_Name FROM TABLE1); 替换为您要插入的值。

(作为一般性评论:我不确定问题中的过程是否是解决上述总体问题的最有效解决方案,但这将解决具有重复行的特定问题)