Aqua Studio中的DB2触发器创建设置

时间:2018-08-14 11:29:03

标签: triggers db2 db2-luw

我正在尝试从Aquastudio创建触发器,并最终遇到以下错误。

CREATE TRIGGER VO.ADMIN_TOOL_T02
  AFTER
  DELETE
  ON VO.ADMIN_TOOL
  REFERENCING
    OLD AS OLD
  FOR EACH ROW
  MODE DB2SQL
  BEGIN ATOMIC
      INSERT INTO VO.ADMIN_TOOL_AUD(
                TOOL_URI_X,
                MIGRATED_F,
                STATUS_X,
                UPDATED_LOGIN_NM,
                LAST_USE_TS,
                UPDATED_GUID_X,
                UPDATED_TS,
                ACTION_C)
        VALUES(old.TOOL_URI_X,
                old.MIGRATED_F,
                old.STATUS_X,
                old.UPDATED_LOGIN_NM,
                old.LAST_USE_TS,
                old.UPDATED_LOGIN_NM,
                CURRENT TIMESTAMP,
                'D');
  END;

错误如下:

描述错误:无法禁用执行计划:“ SYSTOOLS.EXPLAIN_OPERATOR”是未定义的名称。SQLCODE = -204,SQLSTATE = 42704,DRIVER = 3.67.28

  

[错误]脚本行:1-10 -------------------------    在“ RENT TIMESTAMP,'I')“之后找到了意外的令牌” END-OF-STATEMENT“。预期的令牌可能包括:“” .. SQLCODE = -104,SQLSTATE = 42601,DRIVER = 3.67.28

[已执行:8/14/2018 6:25:14 AM] [执行:0ms]

  

[错误]脚本行:11-12 ------------------------    在“ END”之后发现意外的令牌“ END-OF-STATEMENT”   “。预期的令牌可能包括:“ JOIN” .. SQLCODE = -104,SQLSTATE = 42601,DRIVER = 3.67.28

[已执行:8/14/2018 6:25:14 AM] [执行:0ms]

如果我删除BEGIN ATOMIC,则END起作用。根据公司标准,我需要包括它们,并使我的Aqua Studio能够使用这些设置。 请指教。

2 个答案:

答案 0 :(得分:1)

这是一个常见问题。当您有一个多语句块(用户定义函数,复合原子SQL,触发器,存储过程...)时,您需要告诉Db2-server内部语句分隔符和整体语句分隔符之间的区别。在您的示例中,触发器(插入)中只有一个语句,但是每个语句可以有很多用来分隔; (例如),但该块的终止定界符必须为其他字符。

通常人们使用;语句内定界符使用分号,替代语句定界符使用不同的字符,例如@(或!等)。

执行此操作的方法因您使用的工具(GUI或命令行等)而异。查看您的GUI工具的设置,并学习如何做。

对于Aqua Data Studio v19,请单击“文件”>“选项”>“常规”,然后查看“ @在行尾终止语句”,然后勾选该框,然后单击“确定”以应用更改。如果愿意,还可以使用“ /行尾终止语句”。

还要检查您的站点是否使用了已经有此类定界符/终止符标准的自动生成工具,因为您随后应该使用相同的字符。这将允许脚本和GUI都使用相同的定界符。如果脚本处理器是通过-#SET TERMINATOR方法的Db2 CLP,则SQL脚本还可以动态选择替代分隔符。

答案 1 :(得分:0)

运行时我仍然看到错误。 以下是我的Aquadata Studio的屏幕截图。

General

Scripts


下面是脚本和错误

Error