dbvisualizer创建触发器时出错

kmb7vmvb  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(508)

我使用的是dbvisualizerpro9.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;
/...

它们是一系列相同的 triggers bbdd的不同表格。当我运行 sql 命令显示以下错误消息:
14:42:07[创建-0行,0.032秒]命令已处理。没有行受到影响
14:42:07[:new.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á利达
14:42:07[/-0行,0.000秒][代码:900,sql状态:42000]ora-00900:判决sql no vá利达
14:42:07[:new.fecmod_01-0行,0.000秒][代码:17439,sql状态:99999]tipo sql no válido:sqlkind=未初始化
14:42:07[:new.usualt_01-0行,0.000秒][代码:17439,sql状态:99999]tipo sql no válido:sqlkind=未初始化
14:42:07[:new.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:无todas las变量han sido enlazadas
14:42:07[结束-0行,0.015秒][代码:900,sql状态:42000]ora-00900:sentencia sql no vá利达
...
在这之后 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 .

fslejnso

fslejnso1#

create trigger在dbvisualizer中被称为“复杂语句”,因为它包含嵌套语句。有关如何执行此类语句,请参见用户指南:
http://confluence.dbvis.com/display/ug100/executing+complex+statements
向汉斯问好

envsm3lx

envsm3lx2#

据我所知,这是错误的:

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>

好像没事吧?

3zwtqj6y

3zwtqj6y3#

我安装了oraclesqldeveloper,sql工作正常。

相关问题