Redshift存储过程创建遇单引号语法错误,求SQL Workbench兼容方案
解决Redshift存储过程中单引号冲突的问题
我完全懂你现在卡在哪了:Redshift里创建存储过程时,整个过程体用单引号包着,结果WHERE子句里的'SAMPLE'直接触发语法错误;换成双引号吧,Redshift又会把它当成列名,而且SQL Workbench还不支持用$$来定义过程边界,确实头疼。别慌,这里有个绝对可行的解决办法:
核心方案:转义内部单引号
在Redshift的PL/pgSQL语法里,要是你需要在单引号包裹的字符串里使用单引号,只要连续写两个单引号就能完成转义。这种方式是Redshift官方认可的,而且SQL Workbench对这个语法完全兼容,不会出问题。
修改后的存储过程代码
CREATE OR REPLACE PROCEDURE sp_test() AS ' BEGIN TRUNCATE TABLE TABLE_1; INSERT INTO TABLE_1 SELECT COL1, COL2 FROM TABLE_2 WHERE CONDITION=''SAMPLE''; END; ' LANGUAGE plpgsql;
为什么这个方法能行?
- 外层的单引号用来划定存储过程代码体的范围
- 内部的
''SAMPLE''会被Redshift正确解析为字符串常量'SAMPLE',不会和外层的单引号产生语法冲突 - 全程不需要依赖
$$语法,完美适配SQL Workbench的限制
直接运行这段修改后的代码,就能顺利创建存储过程了。
内容的提问来源于stack exchange,提问作者pc_pyr
相关产品推荐
相关产品推荐

