Snowflake表存储默认日期值及存储过程插入报错问题咨询
问题根因
你在代码中仅执行了select current_date()查询,但没有读取该查询返回的实际日期值,直接将SQL语句字符串select current_date()作为绑定参数传入插入语句,数据库在尝试将该字符串转换为日期类型时失败,因此抛出对应报错。此外Snowflake JavaScript存储过程的binds参数要求传入数组类型,你的写法也不符合规范。
修正后完整代码
create or replace procedure test_dt() returns string not null language javascript as $$ try { var c_dt_sql = `select current_date()`; // 执行查询获取结果集 var result_set = snowflake.execute({sqlText:c_dt_sql}); // 移动游标到结果集第一行 result_set.next(); // 取出第一列的日期值 var current_dt = result_set.getColumnValue(1); var sql_query = `insert into test_date values (:1)`; // 绑定实际日期值执行插入,binds参数传入数组 snowflake.execute( {sqlText: sql_query, binds:[current_dt]}); return "插入成功,当前日期:" + current_dt; } catch(err) { return err.message; } $$;
执行call test_dt();即可完成正常插入。
简化方案
如果不需要在JavaScript逻辑中使用当前日期值,可以直接在插入SQL中调用current_date()函数,省去单独查询再绑定的步骤:
create or replace procedure test_dt() returns string not null language javascript as $$ try { var sql_query = `insert into test_date values (current_date())`; snowflake.execute({sqlText: sql_query}); return "插入成功"; } catch(err) { return err.message; } $$;
内容的提问来源于stack exchange,提问作者user16595206
相关产品推荐
相关产品推荐

