当前位置: 代码迷 >> DB2 >> 求教~存储过程脚本施行不了
  详细解决方案

求教~存储过程脚本施行不了

热度:2055   发布时间:2013-02-26 00:00:00.0
求教~存储过程脚本执行不了
下面存储过程编译都过不去,很奇怪 ~~~,本存储过程是用datastudio工具建的,建好了也能运行,不过脚本导出后在执行就老是报错......

SQL code
CREATE PROCEDURE "DB2ADMIN"."PROC_INITELGUSER"  ()    LANGUAGE SQLBEGIN      --拿出来是可以执行的      UPDATE ELGUSER A SET CURRENTSTAT = 0 WHERE NOT EXISTS (SELECT 1 FROM BASE_USER_INFO B WHERE  A.ID = B.USER_ID);      --拿出来是可以执行的      MERGE INTO ELGUSER AS EU        USING BASE_USER_INFO AS BUI        ON EU.ID=BUI.USER_ID        WHEN MATCHED THEN UPDATE SET EU.FULLNAME=BUI.NAME,EU.DEPTID=BUI.DEPT1_NO,EU.GOVID=BUI.DEPT2_NO,EU.CURRENTSTAT='1',EU.EMAIL=EU.ID||'1'      WHEN NOT MATCHED THEN INSERT VALUES (BUI.USER_ID,BUI.USER_ID,'96e79218965eb72c92a549dd5a330112',BUI.NAME,BUI.DEPT1_NO,BUI.DEPT2_NO,'N','1',BUI.USER_ID||'1','');END;


错误如下:
---------------------------------------------------------------------------------------
CREATE PROCEDURE "DB2ADMIN"."PROC_INITELGUSER" ()
LANGUAGE SQL
BEGIN
  UPDATE ELGUSER A SET CURRENTSTAT = 0 WHERE NOT EXISTS (SELECT 1 FROM BASE_USER_INFO B WHERE A.ID = B.USER_ID)
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N 在 "E A.ID = B.USER_ID)" 后面找到异常标记
"END-OF-STATEMENT"。预期标记可能包括:"<psm_semicolon>"。 LINE NUMBER=4. 
SQLSTATE=42601

MERGE INTO ELGUSER AS EU USING BASE_USER_INFO AS BUI ON EU.ID=BUI.USER_ID WHEN MATCHED THEN UPDATE SET EU.FULLNAME=BUI.NAME,EU.DEPTID=BUI.DEPT1_NO,EU.GOVID=BUI.DEPT2_NO,EU.CURRENTSTAT='1',EU.EMAIL=EU.ID||'1' WHEN NOT MATCHED THEN INSERT VALUES (BUI.USER_ID,BUI.USER_ID,'96e79218965eb72c92a549dd5a330112',BUI.NAME,BUI.DEPT1_NO,BUI.DEPT2_NO,'N','1',BUI.USER_ID||'1','')
DB20000I SQL 命令成功完成。

END
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N 在 "END" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN
<joined_table>"。 SQLSTATE=42601

SQL0104N 在 "END" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN <joined_table> "。

说明: 

在文本 "<文本>" 后面的指定标记处检测到 SQL 语句中或 SYSPROC.ADMIN_CMD 
过程的输入命令字符串中的语法错误。"<文本>" 字段指示无效标记前面的 SQL 
语句中或 SYSPROC.ADMIN_CMD 过程的输入命令字符串的 20 个字符。

作为帮助,在 SQLCA 的 SQLERRM 字段中,提供了有效标记的部分列表作为 "<标
记列表>"。此列表假定语句直到该位置为止均正确。

无法处理该语句。

用户响应: 

在指定的标记区域内检查并更正语句。

  sqlcode:-104

  sqlstate:42601

------解决方案--------------------------------------------------------
你执行的方式有错误,需要保存成一个文件,用db2 -cvf xxx来运行,

你是直接拷贝到cmd里运行的吧?
------解决方案--------------------------------------------------------
你的脚本在哪里执行的
  相关解决方案