Ошибка DbVisualizer при создании триггеров

0

Я использую версию 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;
/...

Они представляют собой список идентичных triggers разных таблиц BBDD. Когда я запускаю команду sql она показывает мне эти сообщения об ошибках:

14:42:07 [CREATE - 0 строк, 0.032 сек.] Команда обработана. Никаких строк не было

14:42:07 [: NEW.USUMOD_01 - 0 строк, 0.000 секунд] [Код: 17439, SQL State: 99999] Tipo SQL no válido: sqlKind = UNINITIALIZED

14:42:07 [END - 0 строк, 0.000 секунд] [Код: 900, SQL Состояние: 42000] ORA-00900: sentencia SQL no válida

14:42:07 [ / - 0 rows, 0.000 secs] [Код: 900, SQL Состояние: 42000] ORA-00900: sentencia SQL no válida

14:42:07 [: NEW.FECMOD_01 - 0 строк, 0.000 секунд] [Код: 17439, SQL State: 99999] Tipo SQL no válido: sqlKind = UNINITIALIZED

14:42:07 [: NEW.USUALT_01 - 0 rows, 0.000 secs] [Код: 17439, SQL State: 99999] Tipo SQL no válido: sqlKind = UNINITIALIZED

14:42:07 [: NEW.USUMOD_01 - 0 строк, 0.000 секунд] [Код: 17439, SQL State: 99999] Tipo SQL no válido: sqlKind = UNINITIALIZED

14:42:07 [SELECT - 0 rows, 0.000 secs] [Код: 1008, SQL State: 72000] ORA-01008: нет переменных todas las han sido enlazadas

14:42:07 [END - 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 работает и код хорошо написан, поэтому я пришел к выводу, что наиболее вероятно, что SQL-интерпретатор DbVisualizer рассматривает ; как END.

  • 1
    Это похоже на вопрос о СУБД Oracle. Если это так, удалите тег MySQL.
Теги:
dbvisualizer

3 ответа

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>

Кажется, все в порядке, а?

  • 0
    Извините, неверное имя последовательности является ошибкой расшифровки, я редактирую вопрос.
  • 0
    В этом случае опубликованный вами код действителен для Oracle (как я показал в моем примере). Я не знаю, что вызывает ошибки, так как я не использую DbVisualizer, извините.
Показать ещё 1 комментарий
0

CREATE TRIGGER - это то, что называется "сложным выражением" в DbVisualizer, поскольку оно содержит вложенные операторы. Инструкции по выполнению такого рода инструкций см. В руководстве пользователя:

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

С наилучшими пожеланиями, Ханс

0

Я устанавливаю Oracle SQL Developer, и SQL работает правильно.

  • 0
    Хороший. Проблема решена.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню