错误 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 列