将 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();
我正在尝试将以下 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();