无法在 Snowflake 中创建返回“表”的 UDF - 编译错误

问题描述 投票:0回答:1
USE AGDWHDEV.EDW_WEATHER; -- My database and schema

CREATE OR REPLACE function EDW_WEATHER.find_nearest_radar()
  returns table (LATITUDE number, LONGITUDE number)
  as 'SELECT 1 LATITUDE, 1 LONGITUDE';

-- The function compiled successfully but when I ran it:

select EDW_WEATHER.find_nearest_radar();

-- I get this:

002141 (42601): SQL compilation error:

Unknown user-defined function EDW_WEATHER.FIND_NEAREST_RADAR

如果我将返回类型更改为 FLOAT(非表)或任何简单的返回类型,它就可以工作。下定决心后,我在网上搜索并按照此示例进行操作,网址为:

https://www.bmc.com/blogs/snowflake-user-defined-functions/

在“雪花表函数”一节中

但我遇到了同样的错误!我做错了什么?

function return snowflake-cloud-data-platform user-defined-functions
1个回答
1
投票

因为它返回的是一个表,所以不能直接选择它。它需要是一个源,因此包装在一个表中并调用如下:

CREATE OR REPLACE function edw_weather.find_nearest_radar()
  returns table (LATITUDE number, LONGITUDE number)
  as 'SELECT 1, 1';
SELECT * 
FROM TABLE(edw_weather.find_nearest_radar());

给出:

纬度 经度
1 1

注意:

SELECT 1 LATITUDE, 1 LONGITUDE
可以更改为
SELECT 1,1
,因为列的名称已在输出中声明。但通常使用别名时,使用 AS 来帮助表明您对重命名/等缺少逗号的诗句的含义不太容易出错。
SELECT 1 AS latitude, 1 AS longitude

© www.soinside.com 2019 - 2024. All rights reserved.