ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【DB2报错】执行存储过程报 SQLCODE:-104 SQLSTATE:42601 [打印本页]

作者: 冬雨财经    时间: 2024-6-14 23:40
标题: 【DB2报错】执行存储过程报 SQLCODE:-104 SQLSTATE:42601
今天创建存储过程的时候碰到这个报错:

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

不要慌!!遇事不决先翻译!!!
翻译:在“COMMIT”之后发现了一个异常的tkoen“END-OF-STATEMENT”,异常的tkoen 大概包罗:“END IF”.SQL状态:-104 SQL代码:42601
报错解释 :
缘故原由分析:
处理方式:
情况一、
情况二、


报错解释 :

SQLCODE:-104   错误状态码,在 文本 背面找到异常 标记。预期标记大概包罗: 标记列表
SQLSTATE:42601 错误类代码,寄义字符、标记或自居无效或丢失。
用户响应:在指定的标记地域内检查并更正语句。

缘故原由分析:

根据提示找到问题语句所在地方,COMMIT背面也只是一个正常的 IF 判断结束和 存储过程结束而已,并没有什么异常。但是提示还另外补了一句unexpected tkoen "END-OF-STATEMENT" 结束出现了问题。
  1. CREATE OR REPLACE PROCEDURE DROP_VIEW(
  2.   IN V_NAME VARCHAR(100))
  3. BEGIN
  4. DECLARE CNT_V INTEGER;
  5. DECLARE DROP_SQL VARCHAR(1000);
  6. SET CNT_V= (SELECT COUNT(1) FROM SYSCAT.VIEWS WHERE VIEWSCHEMA = TRIM(CURRENT_SCHEMA) AND VIEWNAME = V_NAME);
  7. IF CNT_V <> 0 THEN
  8. SET DROP_SQL = 'DROP VIEW ' || V_NAME;
  9. COMMIT;
  10. END IF;
  11. END;
复制代码

处理方式:

情况一、

按照提示的话我们可以发现问题就出现在存储过程结束的位置,检查结束语句分隔符为“@”;
先举行一波检查  DBeaver 客户端 工具栏 中 【窗口】-->>【首选项】 找到设置语句分隔符的窗口。

 基于第一种情况如果正常存储过程的内容没有任何语法问题,应用并关闭后是可以执行乐成的。
   ps:由于这次我执行创建存储过程着实DBeaver上,底层对应的DB2数据库是基于Linux环境摆设的,所以它接受的存储过程 结束语句分隔符为“@” 而并不是常见的 结束语句分隔符“;”。
  
情况二、

显着已经按照 情况一 的步骤改好了语句分隔符,为什么还是会报SQLSTATE:42601 SQLCODE:-104呢?!主要缘故原由有如下:
     
其他报错 的缘故原由码以及其他报错的错误状态码可以在下面 IBM 的链接检察。





欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4