SnowFlake 存储过程根据条件从表中删除一行

Posted

技术标签:

【中文标题】SnowFlake 存储过程根据条件从表中删除一行【英文标题】:SnowFlake stored procedure to delete a row from a table based on a condition 【发布时间】:2020-10-02 14:26:53 【问题描述】:

我正在根据 where 条件从表中删除一行,但我不明白我哪里出错了

我有一个表 TABLE1 如下

-------------------------------
|  DB |  SC  |  TB  | COLUMNS |
-------------------------------
| DB1 |  SC1 |  TB1 |   COL1  |
| DB2 |  SC2 |  TB2 |   COL2  | <-- Delete this row
| DB3 |  SC3 |  TB3 |   COL3  |
-------------------------------

这是我的存储过程

 CREATE OR REPLACE PROCEDURE DEL(COL VARCHAR) // taking column name as parameter to delete that row
        RETURNS string
        LANGUAGE javascript
        AS
        $$
            var str = '';
            var stmt = snowflake.createStatement(sqlText: "DELETE FROM DATA_QUALIT WHERE COLUMNS = +COL+";");
            stmt.execute(); 
            return str;     
        $$;

    CALL DEL('COL2');  //Calling the procedure

但是,我遇到了一个错误

Execution error in store procedure DEL: SQL compilation error: error line 1 at position 40 invalid identifier 'COL2'

【问题讨论】:

【参考方案1】:

我相信您只是缺少值周围的单引号:

var stmt = snowflake.createStatement(sqlText: "DELETE FROM DATA_QUALIT WHERE COLUMNS = '" + COL +"';");

我希望这会有所帮助...丰富

附言如果这个(或另一个)答案对您有帮助,请花点时间“接受”有帮助的答案 通过单击答案旁边的复选标记将其从“灰色”切换为“已填充”。

【讨论】:

以上是关于SnowFlake 存储过程根据条件从表中删除一行的主要内容,如果未能解决你的问题,请参考以下文章

使用游标时从游标中删除一行

在 Snowflake 中从表中取消嵌套

如何跨多个模式从表中删除分区?

使用其他表的列从表中删除

从表中删除一行并将布尔标志传递给 API,而不删除实际对象

droptruncate和delete的区别