将 EXECUTE 语句从 Azure SQL 转换为 Snowflake

Converting EXECUTE Statements from Azure SQL to Snowflake

我正在尝试将以下 Azure SQL 存储过程转换为 Snowflake。但是我还找不到 EXEC 语句的替代方法:

CREATE PROC SAMPLE_PROC
AS  
BEGIN  
 DECLARE @BusinessUnitKey INT=(SELECT BusinessUnitKey FROM BusinessUnit WHERE BusinessUnitName='ABC')  ;
 DECLARE @LoadDate DATETIME=  (SELECT Cast(GETUTCDATE() as Date))  ;
 DECLARE @DataLoadLogKey INT = (  
   SELECT MAX(DataLoadLogKey)  
   FROM DataLoadLog  
   WHERE BusinessUnitKey = @BusinessUnitKey  
   )  
  ,@TableName VARCHAR(100) = 'ProductType'  
  ,@StoredProcName VARCHAR(100) = (object_name(@@procid))  
  ,@StarDateTime DATETIME = @LoadDate  
  ,@EndDateTime DATETIME = NULL  
  ,@Status VARCHAR(100) = 'In Progress'  
  ,@LoadDescription VARCHAR(1000) = 'Loading Data'  ;
  
 EXEC dbo.usp_procedure @DataLoadLogKey = @DataLoadLogKey  
  ,@TableName = @TableName  
  ,@StoredProcName = @StoredProcName  
  ,@StarDateTime = @StarDateTime  
  ,@EndDateTime = NULL  
  ,@Status = @Status  
  ,@LoadDescription = @LoadDescription ; 
END;

谁能提供下Snowflake中对应的execute语句?

Snowflake存储过程是用JavaScript写的,通过调用一个JavaScriptAPI可以执行SQL条语句。此 API 与 Snowflake 连接器和驱动程序(Node.js、JDBC、Python 等)中的 API 相似但不完全相同。

详情:https://docs.snowflake.com/en/sql-reference/stored-procedures-usage.html#implementation-and-api

您将能够找到几个代码示例: https://docs.snowflake.com/en/sql-reference/stored-procedures-usage.html#examples

查看文档中的 Working with Stored Procedures

这是一个应该编译的粗略存根。 我无法测试代码,因为我没有用于验证您的表或数据的 ddl,但这应该会给您一个良好的开端。

此致。

CREATE OR REPLACE PROCEDURE SAMPLE_PROC()
returns VARCHAR not null
language javascript
as 
$$


var businessUnitKey , loadDate, dataLoadLogKey, sql,  statement, rs, message ;

message= "FAILED";

// get business unit key
sql = `SELECT BusinessUnitKey FROM BusinessUnit WHERE BusinessUnitName='ABC'`;
statement = snowflake.createStatement({sqlText: sql});
result_set = statement.execute();

while (result_set.next())  {
    businessUnitKey = result_set.getColumnValue(1);
}
// get load date 
sql = `SELECT Cast(SYSDATE() as Date)`;
statement = snowflake.createStatement({sqlText: sql});
result_set = statement.execute();
while (result_set.next())  {
loadDate = result_set.getColumnValue(1);
}

//return loadDate
sql = `SELECT MAX(DataLoadLogKey)  
   FROM DataLoadLog  
   WHERE BusinessUnitKey = ` + businessUnitKey + `;` 
statement = snowflake.createStatement({sqlText: sql});
result_set = statement.execute();
while (result_set.next())  {
dataLoadLogKey = result_set.getColumnValue(1);
}


var TableName       = 'ProductType'  
  ,StoredProcName   = 'SAMPLE_PROC()'
  ,StarDateTime     = LoadDate  
  ,EndDateTime      = NULL  
  ,Status           = 'In Progress'  
  ,LoadDescription  = 'Loading Data'  ;


sql = `CALL dbo.usp_procedure(:1,:2,:3,:4,:5,:6,:7); `
statement = snowflake.createStatement({
        sqlText: sql,
        binds: [dataLoadLogKey,TableName,StoredProcName,StarDateTime,EndDateTime,Status,LoadDescription]
    });

message= "SUCCESSFUL";
return message;

$$;

call SAMPLE_PROC();