Aginity Workbench创建Netezza存储过程报BEGIN_PROC未终止错误
报错根因
触发该错误的原因有两点:
- Aginity Workbench默认以
;作为单条SQL的结束分隔符,你编写的存储过程内部包含多个分号,工具会在读取到第一个分号时就截断SQL,将不完整的语句片段提交给PureData System for Analytics引擎执行。引擎识别到BEGIN_PROC标记后找不到匹配的结束标识,直接抛出unterminated BEGIN_PROC string错误。 - 原存储过程存在冗余语法:NZPLSQL规范中,DECLARE变量定义块结束后无需额外嵌套一层
BEGIN/END块,多余嵌套会提升解析异常概率。
解决方法
按以下步骤操作即可正常创建存储过程:
- 临时修改查询窗口的语句分隔符:在Aginity Workbench查询窗口顶部找到分隔符设置项,将默认的
;修改为//(或其他不会在存储过程代码中出现的字符),避免工具提前截断SQL语句。 - 使用修正后的存储过程代码执行创建:
CREATE OR REPLACE PROCEDURE OID_DB.SP_TEST_1(CHARACTER VARYING(8)) RETURNS CHARACTER VARYING(ANY) LANGUAGE NZPLSQL AS BEGIN_PROC DECLARE PV_YYYYMMDD ALIAS FOR $1; RETURN 'TEST_OK'; END_PROC; //
- 创建完成后,将语句分隔符改回默认的
;,即可正常执行其他普通SQL语句。存储过程创建成功后,可通过CALL OID_DB.SP_TEST_1('测试参数');验证执行效果,正常会返回TEST_OK。
内容的提问来源于stack exchange,提问作者Jeniffer Lorena Guillen Castro
相关产品推荐
相关产品推荐

