错误 DbVisualizer 创建触发器



我正在使用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 [创建 - 0 行,0.032 秒] 命令已处理。没有行 影响

14:42:07 [:新.USUMOD_01 - 0 行,0.000 秒] [代码:17439,SQL 状态: 99999] Tipo SQL no válido: sqlKind = 未初始化

14:42:07 [结束 - 0 行,0.000 秒] [代码:900,SQL 状态:42000] ORA-00900: sentencia SQL no válida

14:42:07 [/- 0 行,0.000 秒] [代码:900,SQL 状态:42000] ORA-00900: sentencia SQL no válida

14:42:07 [:新.FECMOD_01 - 0 行,0.000 秒] [代码:17439,SQL 状态: 99999] Tipo SQL no válido: sqlKind = 未初始化

14:42:07 [:新.USUALT_01 - 0 行,0.000 秒] [代码:17439,SQL 状态: 99999] Tipo SQL no válido: sqlKind = 未初始化

14:42:07 [:新.USUMOD_01 - 0 行,0.000 秒] [代码:17439,SQL 状态: 99999] Tipo SQL no válido: sqlKind = 未初始化

14:42:07 [选择 - 0 行,0.000 秒] [代码:1008,SQL 状态:72000] ORA-01008: 没有托达斯拉斯变量汉西多恩拉扎达斯

14:42:07 [结束 - 0 行,0.015 秒] [代码:900,SQL 状态:42000] ORA-00900: sentencia SQL no válida

在此之后,将按以下方式创建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

据我所知,这是错误的:

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 SQL Developer,sql工作正常。

CREATE TRIGGER 是 DbVisualizer 中所谓的"复杂语句",因为它包含嵌套语句。请参阅用户指南,了解如何执行此类语句:

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

此致敬意 汉斯

相关内容

  • 没有找到相关文章

最新更新