Amazon Redshift存储过程报错:END IF语句存在问题求助
Redshift存储过程END IF相关错误排查
以下是你的存储过程中与END IF相关及其他语法错误的详细排查:
- 内部代码块未正确闭合:IF分支内使用了
BEGIN开启代码块,但未用END闭合,直接使用END IF导致语法结构不匹配,这是触发END IF错误的核心原因。 - SQL语句缺少分号:UPDATE语句末尾未添加分号,Redshift要求每条独立SQL语句必须以分号结尾,否则会导致解析失败。
- 字段拼写错误:
new_old_merge.clain_oid中的clain_oid是拼写错误,应为claim_oid,否则会引发字段不存在的错误。 - 语法兼容性问题:Redshift基于PostgreSQL生态,不支持
top 1语法,需替换为标准的LIMIT 1。
修正后的完整存储过程代码:
CREATE OR REPLACE PROCEDURE IF_CON() AS $$ DECLARE BEGIN IF(SELECT EXISTS(SELECT clientid FROM ods_epremis.new_old_merge)) THEN BEGIN UPDATE ods_epremis.new_old_merge SET patientencounter_id=(SELECT max(patientencounter_id) FROM ods_epremis.new_old_merge)+1 WHERE new_old_merge.claim_oid =(SELECT claim_oid from ods_epremis.new_old_merge LIMIT 1); INSERT INTO ods_epremis.CLM_REM_MAPPING_PATIENT_ENCOUNTER SELECT * from ods_epremis.new_old_merge where claim_oid=(select claim_oid from ods_epremis.new_old_merge order by claim_oid LIMIT 1); END; END IF; END; $$ LANGUAGE plpgsql;
内容的提问来源于stack exchange,提问作者Sumit Gupta
相关产品推荐
相关产品推荐

