错误 DbVisualizer 创建触发器

Posted

技术标签:

【中文标题】错误 DbVisualizer 创建触发器【英文标题】:Error DbVisualizer creating triggers 【发布时间】:2018-08-10 05:02:10 【问题描述】:

我正在使用 DbVisualizer Pro 9.5.6 版本,并且正在运行以下 sql 命令来创建 triggers

CREATE OR REPLACE TRIGGER "MYDB"."TG_T01_01" BEFORE INSERT ON T01
FOR EACH ROW
BEGIN
                :NEW.FECALT_01 := SYSDATE;
                :NEW.FECMOD_01 := SYSDATE;                  
                SELECT T01Q00.NEXTVAL INTO :NEW.ID_01 FROM DUAL;
END;
/

CREATE OR REPLACE TRIGGER "MYDB"."TG_T01_02" 
BEFORE UPDATE ON T01
FOR EACH ROW
BEGIN
                :NEW.FECMOD_01 := SYSDATE;              
END;
/...

它们是 BBDD 不同表的相同triggers 的列表。当我运行 sql 命令时,它会显示以下错误消息:

14:42:07 [CREATE - 0 行,0.032 秒] 命令已处理。没有行 受影响

14:42:07 [:NEW.USUMOD_01 - 0 行,0.000 秒] [代码:17439,SQL 状态:99999] 类型 SQL 无效:sqlKind = UNINITIALIZED

14:42:07 [END - 0 行,0.000 秒] [代码:900,SQL 状态:42000] ORA-00900: 句子 SQL 无效

14:42:07 [/ - 0 行,0.000 秒] [代码:900,SQL 状态:42000] ORA-00900: 句子 SQL 无效

14:42:07 [:NEW.FECMOD_01 - 0 行,0.000 秒] [代码:17439,SQL 状态:99999] 类型 SQL 无效:sqlKind = UNINITIALIZED

14:42:07 [:NEW.USUALT_01 - 0 行,0.000 秒] [代码:17439,SQL 状态:99999] 类型 SQL 无效:sqlKind = UNINITIALIZED

14:42:07 [:NEW.USUMOD_01 - 0 行,0.000 秒] [代码:17439,SQL 状态:99999] 类型 SQL 无效:sqlKind = UNINITIALIZED

14:42:07 [SELECT - 0 行,0.000 秒] [代码:1008,SQL 状态:72000] ORA-01008: 没有 todas las 变量 han sido enlazadas

14:42:07 [END - 0 行,0.015 秒] [代码:900,SQL 状态:42000] ORA-00900: 句子 SQL 无效

...

在此之后,trigger 以下列方式创建:

CREATE OR REPLACE TRIGGER "MYDB"."TG_T01_01" BEFORE INSERT ON T01
    FOR EACH ROW
    BEGIN
                    :NEW.FECALT_01 := SYSDATE

注意:已经创建错误的trigger可以编辑并放代码,trigger确实可以,代码写得很好,所以我得出结论最有可能是DbVisualizer的sql解释器将; 视为END

【问题讨论】:

这看起来像是一个 Oracle RDBMS 问题。如果是这种情况,请删除 mysql 标签。 【参考方案1】:

据我所知,这是错误的:

SELECT 01Q00.NEXTVAL INTO :NEW.ID_01 FROM DUAL;

因为它是一个无效的序列名称 - 应该有一个字母作为第一个字符,而不是一个数字。这是一个例子:

SQL> create table t01
  2    (id_01       number,
  3     fecalt_01   date,
  4     fecmod_01   date
  5    );

Table created.

SQL> create sequence 01q00;
create sequence 01q00
                *
ERROR at line 1:
ORA-02277: invalid sequence name

如果我们忽略错误,让我们创建一个触发器:

SQL> create or replace trigger tg_t01_01
  2  before insert on t01
  3  for each row
  4  begin
  5    :new.fecalt_01 := sysdate;
  6    :new.fecmod_01 := sysdate;
  7    select 01q00.nextval into :new.id_01 from dual;
  8  end;
  9  /

Warning: Trigger created with compilation errors.

SQL> show err
Errors for TRIGGER TG_T01_01:

LINE/COL ERROR
-------- -----------------------------------------------------------------
4/3      PL/SQL: SQL Statement ignored
4/15     PL/SQL: ORA-00923: FROM keyword not found where expected

好的,让我们修复序列名称并重新创建触发器(使用新的序列名称):

SQL> create sequence seq01;

Sequence created.

SQL> create or replace trigger tg_t01_01
  2  before insert on t01
  3  for each row
  4  begin
  5    :new.fecalt_01 := sysdate;
  6    :new.fecmod_01 := sysdate;
  7    select seq01.nextval into :new.id_01 from dual;
  8  end;
  9  /

Trigger created.

SQL>

好像还可以吧?

【讨论】:

抱歉,错误的序列名称是转录错误,我编辑问题。 在这种情况下,就 Oracle 而言,您发布的代码是有效(如我在示例中所示)。我不知道是什么导致了错误,因为我不使用 DbVisualizer ,抱歉。 是的,代码有效,但我正在尝试在 dbVisualizer 中执行 sql,但它不起作用。我的问题不是 sql。问题出在 dbVisualizer【参考方案2】:

我安装了 Oracle SQL Developer 并且 sql 工作正常。

【讨论】:

【参考方案3】:

CREATE TRIGGER 在 DbVisualizer 中被称为“复杂语句”,因为它包含嵌套语句。请参阅用户指南了解如何执行此类语句:

http://confluence.dbvis.com/display/UG100/Executing+Complex+Statements

最好的问候 汉斯

【讨论】:

以上是关于错误 DbVisualizer 创建触发器的主要内容,如果未能解决你的问题,请参考以下文章

我试图从 dbvisualizer 连接 SQL 中的 3 列

dbvisualizer 自动显示表明

DbVisualizer:无法连接到 ORB

从循环 dbvisualizer 返回结果

用 DbVisualizer怎样在本地创建一个SQL Server数据库

在 Mac 上将 DbVisualizer 连接到 HSQLDB