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/
在“雪花表函数”一节中
但我遇到了同样的错误!我做错了什么?
因为它返回的是一个表,所以不能直接选择它。它需要是一个源,因此包装在一个表中并调用如下:
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