今天创建存储过程的时候碰到这个报错:

AN unexpected tkoen "END-OF-STATEMENT" was found following "COMMIT",Expected tokens may include:"END IF"..SQLSTATE:-104 SQLCODE:42601

翻译:在“COMMIT”之后发现了一个异常的tkoen“END-OF-STATEMENT”,异常的tkoen 可能包括:“END IF”.SQL状态:-104 SQL代码:42601

报错解释 :

原因分析:

处理方式:

情况一、

情况二、


报错解释 :

SQLSTATE:-104   错误状态码,在 文本 后面找到异常 标记。预期标记可能包括: 标记列表

SQLCODE=42601 错误类代码,含义字符、标记或自居无效或丢失。

用户响应:在指定的标记区域内检查并更正语句。


原因分析:

根据提示找到问题语句所在地方,COMMIT后面也只是一个正常的 IF 判断结束和 存储过程结束而已,并没有什么异常。但是提示还另外补了一句unexpected tkoen "END-OF-STATEMENT" 结束出现了问题。

CREATE OR REPLACE PROCEDURE DROP_VIEW(IN V_NAME VARCHAR(100))
BEGINDECLARE CNT_V INTEGER;DECLARE DROP_SQL VARCHAR(1000);SET CNT_V= (SELECT COUNT(1) FROM SYSCAT.VIEWS WHERE VIEWSCHEMA = TRIM(CURRENT_SCHEMA) AND VIEWNAME = V_NAME);
IF CNT_V <> 0 THEN
SET DROP_SQL = 'DROP VIEW ' || V_NAME;
COMMIT;
END IF;END;

处理方式:

情况一、

按照提示的话我们可以发现问题就出现在存储过程结束的位置,检查结束语句分隔符为“@”;

先进行一波检查  DBeaver 客户端 工具栏 中 【窗口】-->>【首选项】 找到设置语句分隔符的窗口。

基于第一种情况如果正常存储过程的内容没有任何语法问题,应用并关闭后是可以执行成功的。

ps:因为这次我执行创建存储过程实在DBeaver上,底层对应的DB2数据库是基于Linux环境部署的,所以它接受的存储过程 结束语句分隔符为“@” 而并不是常见的 结束语句分隔符“;”。


情况二、

明明已经按照 情况一 的步骤改好了语句分隔符,为什么还是会报SQLSTATE:-104 SQLCODE:42601呢?!主要原因有如下:

  1. 根据提示查看出现报错的位置是否有语法错误。一般存储过程是从上往下执行的。如果有重复的 字眼 ,看第一个出现该 字眼 的位置就好了。
  2. 多个 IF 条件或者其他循环体中 漏了 END IF;有时候 IF 一层套一层的很容易少了的。
  3. SET = ........ 句式后面忘记添加 “;” 作为结束了。因为存储过程中基本每一句后面都要加 “;”,出了 IF.....THEN 还有循环 那些开头外。

其他报错 的原因码以及其他报错的错误状态码可以在下面 IBM 的链接查看。

【DB2报错】创建存储过程报SQLSTATE:-104 SQLCODE:42601相关推荐

  1. SQLSERVER 创建ODBC 报错的解决办法 SQLState:‘01000‘的解决方案

    SQLSERVER 创建ODBC 报错的解决办法 SQLState:'01000'的解决方案 参考文章: (1)SQLSERVER 创建ODBC 报错的解决办法 SQLState:'01000'的解决 ...

  2. 连接DB2报错:ERRORCODE=-4499, SQLSTATE=08001

    连接DB2时遇到报错:ERRORCODE=-4499, SQLSTATE=08001,仔细检查了一下,发现Databse Server是localhost,改成想要连接的数据库服务器地址就能正常连接了 ...

  3. kettle使用mysql作为资源库报错 创建资源库时只有25张表,原本应该46张表。

    kettle使用mysql作为资源库报错 创建资源库时只有25张表,原本应该46张表. 连用户表都没有 ,导致连 默认的 admin和guest都无法登陆自己的资源库!!!! 问题是 SQL语句里边使 ...

  4. SAP MB1B + 313315做二步法货物移动报错-创建交货的数据不完全(客户)-

    SAP MM MB1B + 313&315做二步法货物移动的时候,系统报错 - 创建交货的数据不完全(客户) - 之对策 [问题] [背景] 该项目对于成品是启用了HUM的,所以,当我们把成品 ...

  5. mtk一键usb驱动_三菱MRJEB驱动器报错,导致报错原因37.1参数设置范围异常?

    三菱MR-JE-B驱动器报错,导致报错原因37.1参数设置范围异常?最近海蓝机电工程师们在做一个项目,做的是三菱MR-JE-B驱动器.工程师们在实操这个项目过程中遇到各种问题,其中就像驱动器报错的问题 ...

  6. WIN11从MSDN重新安装后 应用商店打不开 报错 0x80131500 0x00000194 报错 0x80240438

    简单记录下 WIN11从MSDN重新安装后 应用商店打不开 报错 0x80131500 0x00000194 报错 0x80240438 系统刚刚装好 更改TLS无效 WSReset无效 重置应用 关 ...

  7. 使用poi导出excel报错-打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”

    使用poi导出excel报错-打开文件报"Excel 已完成文件级验证和修复.此工作簿的某些部分可能已被修复或丢弃" 1.原本正常使用的Excel导出突然下载文件报错 2.定位时发 ...

  8. linux安装xfce4,安装 xfce4 报错 - 安装 xfce4 报错 _Linux教程_Linux公社-Linux系统门户网站...

    安装 xfce4 报错 安装 xfce4 报错 [日期:2007-09-08] 来源:Linux公社 作者:Linuxidc [字体:大 中 小] 前面所有的安装验证均已通过,安装到23%左右会抛出一 ...

  9. Foxmail登陆报错outlook邮箱报错:foxmail,C4 NO LOGIN failed.

    1 事件 Foxmail登陆报错outlook邮箱报错: foxmail,C4 NO LOGIN failed. 2 原因 这是由于outlook邮箱设置了双重验证登陆,foxmail无法弹出验证登陆 ...

最新文章

  1. 如何查看Linq to SQL运行时,实际执行的Sql语句
  2. 线程中消费者生产者的实例代码(使用Lock类)
  3. python散点图点的大小-python散点图面积大小比例轴长度
  4. jmeter 监听的介绍
  5. [学习笔记]电磁场与电磁波
  6. 【Android工具】更新几个平台视频流媒体播放器测试情况
  7. 如何成为一名合格的自动驾驶工程师
  8. 【翻译】How-To: Using the N* Stack, part 3
  9. ajax实现上传文件
  10. 救命神文!应对ubuntu磁盘空间不足(已解决)
  11. python循环结构代码_Python --- 程序的循环结构
  12. 用python写一个简单的爬虫_用Python从零开始写一个简单爬虫
  13. python入门指南全文阅读-Python-3.4-入门指南(官方中文版).pdf
  14. Python 语言程序设计(5-2)七段数码管程序编写设计
  15. Java基础6:代码块与代码加载顺序
  16. 浏览器与输入法——用户入口的争夺
  17. 数据到物联网服务器作用,物联网数据分析是什么?物联网数据分析如何操作?...
  18. C# 本地图片转Base64码和Base64码显示
  19. css样式,中间文字,两边横线
  20. (超、深)超像素网络SSN

热门文章

  1. 超声波风速风向仪换能器 能够在大风速下稳定工作
  2. Unix网络编程unp.h问题以及Linux中的库
  3. 一种可以从零速度启动的航空冲压发动机
  4. FlatBuffer 使用
  5. 软件测评师--第五小时 黑盒测试技术
  6. license控制服务器修改时期,license.dat授权替换方式
  7. WinCC V7.5 连接 S7-1200PLC 步骤
  8. 解决zadig装错驱动导致电脑鼠标用不了的情况
  9. 「宝石风」一人无技术创业,金字塔顶端仍有蓝海机会
  10. XPS测试数据考盘后的处理数据步骤