DB2函数提示多了右括号

小祥V5 2015-04-20 05:05:11

CREATE OR REPLACE FUNCTION FUNC_TEST (
in_opId VARCHAR(20),
in_id VARCHAR(20)
)
RETURNS INTEGER
LANGUAGE SQL
BEGIN ATOMIC
DECLARE v_id VARCHAR(20);
DECLARE v_PId VARCHAR(20);
IF in_opId = in_id THEN
RETURN 0;
END IF;
SET v_id = in_id;
WHILE v_id IS NOT NULL DO
SET v_PId =( SELECT PARENT_ID FROM JFIT.T_SYS_RESOURCE WHERE ID = v_id);
IF v_PId = in_opId THEN
RETURN 0;
END IF;
SET v_id = v_PId;
END WHILE;
RETURN 1;
END;



在DBVisualizer执行;
报错

[CREATE - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] 在 "E v_id VARCHAR(20" 后面找到异常标记 ")"。预期标记可能包括:"END-OF-STATEMENT"。. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.15.82
16:58:16 [DECLARE - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "DECLARE v_PId VARCHAR"。预期标记可能包括:"<values>"。. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.15.82
16:58:16 [IF - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "IF"。预期标记可能包括:"<variable_set>"。. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.15.82
16:58:16 [END - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] 在 "END IF" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN <joined_table>"。. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.15.82
16:58:16 [SET - 0 row(s), 0.000 secs] [Error Code: -206, SQL State: 42703] "V_ID" 在使用它的上下文中无效。. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.15.82
16:58:16 [WHILE - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "WHILE v_id IS NOT NULL DO"。预期标记可能包括:"<space>"。. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.15.82
16:58:16 [IF - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "IF"。预期标记可能包括:"<variable_set>"。. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.15.82
16:58:16 [END - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] 在 "END IF" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN <joined_table>"。. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.15.82
16:58:16 [SET - 0 row(s), 0.000 secs] [Error Code: -206, SQL State: 42703] "V_ID" 在使用它的上下文中无效。. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.15.82
16:58:16 [END - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] 在 "END WHILE" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN <joined_table>"。. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.15.82
16:58:16 [RETURN - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "RETURN"。预期标记可能包括:"<values>"。. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.15.82
16:58:16 [END - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] 在 "END" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN <joined_table>"。. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.15.82
16:58:16 [@ - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] 在 "@" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN <joined_table>"。. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.15.82
... 13 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec [0 successful, 0 warnings, 13 errors]
...全文
601 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxunzan6022 2018-01-05
  • 打赏
  • 举报
回复
有人解决这个问题了吗?这个是不是跟返回类型有关系呀?我返回decimal类型报错,返回varchar不报错
x21456378 2015-04-22
  • 打赏
  • 举报
回复
引用 1 楼 x2145637 的回复:
莫名奇妙的错误
解决方案: (1) 若通过“命令编辑器”执行程序,可以在面板下方将“语句终止符”设为"@", ( 启动db2cmd, 输入db2set db2options=-td@ , 查询db2 list command options可以看到“命令选项 (DB2OPTIONS) = -td@“及”-t 设置语句终止字符 ON“ , 这样就设置成功。在命令行中每次输入语句后都需要@作为语句终止符。 取消终止符只需在db2cmd中输入db2set db2options=td即可。 ) 然后在程序结尾处加上"@",这时就可执行成功;db2 -vf d:\a.sql (2) 若通过“命令窗口”,将程序保存到文件中并在文件末尾加"@",在命令行窗口执行db2 -td@ -vf [File],执行成功。db2 -td@ -vf d:\a.sql 这里的"-t"选项用来指定命令终止符,"@"是选项值,既是用"@"作为命令终止符; 可通过在“命令窗口”中执行命令"db2 ? options"查看参数的用途。 意思就是不能直接用DBisualizer执行,要加@结束符,然后用命令方式执行
小祥V5 2015-04-21
  • 打赏
  • 举报
回复
我顶!!!!
小祥V5 2015-04-20
  • 打赏
  • 举报
回复
莫名奇妙的错误

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧