EXECUTE块中SELECT...INTO返回值异常原因咨询
代码执行结果差异解释
你创建的模拟表包含2条记录,且每条的claim_num值唯一,以下是两段代码返回结果不同的原因:
第一段代码返回null的原因
这段代码的分组逻辑直接基于字段claim_num:
EXECUTE IMMEDIATE $$ DECLARE row_count integer; table_name varchar default 'raw.claims.s_clm_carrier_claim'; BEGIN select count(1) into :row_count from identifier(:table_name) group by claim_num having count(1) > 1; return :row_count; END; $$
由于表中每条记录的claim_num都是唯一值,分组后会生成2个独立分组,每个分组仅包含1条记录。having count(1) > 1的筛选条件会过滤掉所有分组,最终select语句没有返回任何结果。当select into语句未获取到数据时,目标变量row_count会被赋值为null。
第二段代码返回2的原因
这段代码使用变量:fieldgroup作为分组依据:
EXECUTE IMMEDIATE $$ DECLARE row_count integer; table_name varchar default 'raw.claims.s_clm_carrier_claim'; fieldgroup varchar default 'claim_num'; BEGIN select count(1) into :row_count from identifier(:table_name) group by :fieldgroup having count(1) > 1; return :row_count; END; $$
这里的变量:fieldgroup存储的是字符串'claim_num',而非字段本身。分组逻辑变成按固定字符串值分组,所有2条记录都会被分到同一个分组中,此时count(1)的结果为2,满足having count(1) > 1的条件,因此select语句返回2,最终row_count被赋值为2。
内容的提问来源于stack exchange,提问作者juststackoverflow
相关产品推荐
相关产品推荐

