存储过程抛出“缺少列规范”
Posted
技术标签:
【中文标题】存储过程抛出“缺少列规范”【英文标题】:Stored procedure throwing "Missing Column Specification" 【发布时间】:2020-12-16 19:26:02 【问题描述】:我正在使用 javascript 创建一个雪花存储过程。 我收到程序抛出的 SQL 异常,说“缺少列规范”。
堆栈跟踪指向这部分:
var cmd_outputCreation = `CREATE OR REPLACE TABLE $TBL_OUTPUT AS(
SELECT A.*, B.RESULT[0], B.RESULT[1]
FROM(
SELECT $API_FUNCTION(joined.*) AS result
FROM (
SELECT $c_id, $c_location_name,
$c_street_address, $c_city, $c_region,
$c_postal_code, $c_latitude, $c_longitude,
$c_country_code
FROM $TBL_INPUT
) AS joined
) AS B
INNER JOIN $TBL_INPUT AS A
ON A.RECID = B.RESULT[0]
)`;
var stmt_outputCreation = snowflake.createStatement( sqlText: cmd_outputCreation );
var result_outputCreation = stmt_outputCreation.execute();
但是,我在这里看不到任何错误。如果我在没有 SP 的情况下使用它,则查询本身在 SQL 上运行(显然用实际的 SQL 表/列替换变量名)
而且我知道“缺少列规范”的意思是“列没有名称”,但情况似乎并非如此。我在这里错过了什么?
【问题讨论】:
【参考方案1】:您需要为您的 B.RESULT[0] 和 B.RESULT[1] 赋予别名,以便为列提供唯一名称:
create temp table bar as select array_construct(1, 2) as b;
-- This gets missing column specification
create temp table foo as select b[0], b[1] from bar;
-- This does not
create temp table foo as select b[0] as B0, b[1] as B1 from bar;
【讨论】:
以上是关于存储过程抛出“缺少列规范”的主要内容,如果未能解决你的问题,请参考以下文章