SQL Server汇率转换函数转Snowflake(JavaScript实现求助)
将SQL Server的[dbo].[fnCurrencyExchange]转换为Snowflake UDF
- 请提供原SQL Server环境下[dbo].[fnCurrencyExchange]的完整代码,包括参数定义、内部逻辑(比如汇率获取方式、日期处理规则、特殊场景判断等),这是精准转换的核心依据。
- 贴出你编写的Snowflake JavaScript UDF代码,并说明具体问题:是语法报错、逻辑结果不符,还是运行时权限/资源问题?
通用转换示例参考
基于SQL语言的UDF(适合纯SQL逻辑场景)
如果原函数依赖数据库内的汇率表进行转换,以下是适配Snowflake的SQL UDF示例:
CREATE OR REPLACE FUNCTION FN_CURRENCY_EXCHANGE( p_source_currency VARCHAR, p_target_currency VARCHAR, p_amount NUMERIC(18,4), p_exchange_date DATE ) RETURNS NUMERIC(18,4) LANGUAGE SQL AS $$ SELECT CASE WHEN p_source_currency = p_target_currency THEN p_amount ELSE p_amount * exchange_rate END FROM exchange_rates WHERE source_currency = p_source_currency AND target_currency = p_target_currency AND effective_date <= p_exchange_date AND (expiration_date IS NULL OR expiration_date > p_exchange_date) ORDER BY effective_date DESC LIMIT 1; $$;
基于JavaScript的UDF(适合复杂自定义逻辑场景)
如果原函数包含复杂分支或非SQL原生逻辑,以下是Snowflake JavaScript UDF示例:
CREATE OR REPLACE FUNCTION FN_CURRENCY_EXCHANGE_JS( p_source_currency VARCHAR, p_target_currency VARCHAR, p_amount FLOAT, p_exchange_date DATE ) RETURNS FLOAT LANGUAGE JAVASCRIPT AS $$ // 示例:内置固定汇率,实际可通过Snowflake查询获取实时/历史汇率 const rateMap = new Map([ ["USD-EUR", 0.92], ["EUR-USD", 1.09], ["USD-GBP", 0.79] ]); if (p_source_currency === p_target_currency) { return p_amount; } const rateKey = `${p_source_currency}-${p_target_currency}`; if (rateMap.has(rateKey)) { return p_amount * rateMap.get(rateKey); } else { throw new Error(`Exchange rate not found for pair: ${rateKey}`); } $$;
内容的提问来源于stack exchange,提问作者SARBOJIT DAS
相关产品推荐
相关产品推荐

