Процедура хранения снежинки во время работы - PullRequest
0 голосов
/ 25 января 2020

Как я могу воссоздать функцию while в примере с снежинкой:

WHILE @counter <= @LastRow
     BEGIN
        SELECT @DateLoad = CONVERT (date, SUNDAY)
        FROM [Staging].[Stg_EC_WeeksLoad]
        WHERE SEQUENCE = @counter;

        EXEC @return_value = [dbo].[pETLFillFact_Demographics_History] @Date = @DateLoad;

        SET @counter = @counter + 1;
    END

Ответы [ 2 ]

1 голос
/ 26 января 2020

Snowflake поддерживает , выражая хранимые процедуры в JavaScript, а JavaScript поддерживает множественные циклические конструкции , включая while (condition).

Грубый перевод описанного logi c как процедура Snowflake будет выглядеть следующим образом:

CREATE OR REPLACE PROCEDURE looping_process()
RETURNS BOOLEAN
LANGUAGE JAVASCRIPT
AS
$$
  // Get 'LastRow' dynamically, or set/pass a constant alternatively
  var row_count_query = snowflake.createStatement({ sqlText: "SELECT * FROM SOURCE_TABLE" });
  var _resultSet = row_count_query.execute();
  var LastRow = row_count_query.getRowCount();

  var counter = 0;
  while (counter <= LastRow) {

    // Get the dynamic date value by applying the counter
    var seq_query = `SELECT SUNDAY::DATE AS "DateLoad" FROM "Staging"."Stg_EC_WeeksLoad" WHERE SEQUENCE = $counter`;
    var seq_stmt = snowflake.createStatement({ sqlText: seq_query });
    var seq_result = seq_stmt.execute(); seq_result.next();
    var DateLoad = seq_result.getColumnValue("DateLoad");

    // Construct and run the nested procedure call with value found above
    var sub_call_query = `CALL "dbo"."pETLFillFact_Demographics_History"($DateLoad)`;
    var sub_call_stmt = snowflake.createStatement({ sqlText: sub_call_query });
    var sub_call_result = sub_call_stmt.execute(); sub_call_stmt.next();
    var return_value = sub_call_result.getColumnValue(1);

    // Increment for the next loop
    counter += 1;
  }
  // (… add other omitted logic, to return/error-handle/etc. …)
$$
;
0 голосов
/ 25 января 2020

Пример синтаксиса, заданного WHILE c (из документации по Snowflake), выглядит следующим образом:

while (condition)  {
   // Do something ...
   }
...