如何在 Snowflake SQL 中绑定基于 JavaScript 的日期列

How to bind JavaScript based date column in Snowflake SQL

我正在创建基于雪花 JavaScript 的存储过程。我如何在 snowflake sql.

中引用日期数据类型变量

示例代码如下: 在下面的代码中,请建议我如何在 sql 语句中使用 'dnblatestdt' 变量。

create  or replace procedure test_proc_registration_master_perished_dt(PARAM_REG_SUB_UUID VARCHAR)
returns varchar not null
language javascript
as
$$
     
  /*get latest ingestion_uuid for the given state*/
  var step01=`select distinct dnb_applicable_dt,ingestion_uuid from temp_registration_hash_master `;
  var statement01=snowflake.createStatement( {sqlText: step01,binds: [PARAM_REG_SUB_UUID]} );
  variable1= statement01.execute();
  variable1.next();
  dnblatestdt=variable1.getColumnValue(1);
  ingsuuid=variable1.getColumnValue(2);
       
  /* check if the ingestion is successful or not*/
  var step02=`select INGESTION_SUCCESSFUL  from FILE_INGESTION_HISTORY where  ingestion_uuid=:1 and date=:2::TIMESTAMP_LTZ::DATE`;
  var statement02=snowflake.createStatement( {sqlText: step02,binds: [ingsuuid,dnblatestdt]} );
  variable2= statement02.execute();
  variable2.next();
  ingsindc=variable2.getColumnValue(1);

  return 'success'
$$

所以我写了一个更简单的函数,它使用与您的代码类似的模式:

create  or replace procedure test_proc()
returns varchar not null
language javascript
as
$$
     
  var step01 = `SELECT 6::number, '2022-01-27'::timestamp_ntz;`;
  var statement01 = snowflake.createStatement( {sqlText: step01} );
  results1 = statement01.execute();
  results1.next();
  ingsuuid = results1.getColumnValue(1);
  dnblatestdt = results1.getColumnValue(2);
       
  /* check if the ingestion is successful or not*/
  var step02=`SELECT :1 * 2, DATEADD(year,-1, :2::timestamp_ntz);`;
  var statement02 = snowflake.createStatement( {sqlText: step02,binds: [ingsuuid , dnblatestdt]} );
  results2 = statement02.execute();
  results2.next();
  ingsindc = results2.getColumnValue(1);

  return 'success'
$$
;

并且对我有用:

call test_proc();


TEST_PROC
success

我调换了第一个函数读取参数的顺序,但应该没有问题。

这让我觉得你对第二个实例的转换不起作用

:2::TIMESTAMP_LTZ::DATE

所以我建议将该转换移动到第一个函数,这样您就可以在存储过程之外对其进行测试。

SELECT DISTINCT dnb_applicable_dt::TIMESTAMP_LTZ::DATE, ingestion_uuid 
FROM temp_registration_hash_master

如果满意,您不需要对第二次使用的值进行任何转换。