Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBExpert Новый топик    Ответить
 Database Comparer Error  [new]
slay2012
Member

Откуда:
Сообщений: 75
При сравнении баз в логе есть вот такое:

Parsing database object definitions...
==== Error ==== : EduPlan: Missing: <)> (<(>)
Script: Line:548 Pos:49
Linking dependencies...

Такая ошибка когда в запросе к селективной процедуре из этого же пакета указано имя пакета
for select
    ...
from EduPlan.ProcedureName(...)


Если убрать EduPlan, то ругани нет.

При компиляции пакета ошибок нет.
13 сен 18, 14:53    [21673668]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
slay2012
Member

Откуда:
Сообщений: 75
Похоже что я поспешил с выводом
slay2012
Такая ошибка когда в запросе к селективной процедуре из этого же пакета указано имя пакета

Ошибка есть даже в случае если процедура из другого пакета.

В логе только первая ошибка, все дальнейшие даже в других пакетах уже не показываются...

Тогда еще вопрос - если в логах есть ошибки, то все ли различия в базах будут найдены или только то что до ошибки?
13 сен 18, 15:02    [21673688]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2816
slay2012
Ошибка есть даже в случае если процедура из другого пакета.

В логе только первая ошибка, все дальнейшие даже в других пакетах уже не показываются...

Тогда еще вопрос - если в логах есть ошибки, то все ли различия в базах будут найдены или только то что до ошибки?


Различия-то будут найдены, а вот скрипт не факт что корректным будет. Парсер зависимости ищет, а если он обломался, то какие-то зависимости могут быть не обнаружены.
13 сен 18, 16:04    [21673826]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2816
Что-то у меня не воспроизводится проблема.
Вот на таком пакете парсер не ругается:

+
SET TERM ^ ;

CREATE OR ALTER PACKAGE MYPACKAGE
AS
begin
  procedure GetData()
  returns (
    id integer
  );
end^

RECREATE PACKAGE BODY MYPACKAGE
AS
BEGIN
  function some_func (
    InValue integer)
  returns INTEGER
  /* just a comment */
  as
  begin
    RETURN InValue * 2;
  end

  PROCEDURE GETINNERDATA
  RETURNS (
    ID INTEGER
  )
  AS
  DECLARE VARIABLE I INTEGER = 1000;
  BEGIN
    WHILE (I > 0) DO
    BEGIN
      ID = I;
      SUSPEND;
      I = I - 1;
    END
  END

  PROCEDURE GETDATA
  RETURNS (
    ID INTEGER
  )
  AS
  BEGIN
    id = some_func(4);
    FOR SELECT ID
        FROM MYPACKAGE.GETINNERDATA
        INTO :ID
    DO SUSPEND;

    FOR SELECT ID
        FROM "MYPACKAGE".GETINNERDATA
        INTO :ID
    DO SUSPEND;

    FOR SELECT ID
        FROM getinnerdata
        INTO :ID
    DO SUSPEND;
  END

END
^

SET TERM ; ^
13 сен 18, 16:11    [21673837]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
slay2012
Member

Откуда:
Сообщений: 75
Параметры еще нужны
+

SET TERM ^ ;

CREATE OR ALTER PACKAGE MYPACKAGE
AS
begin
  procedure GetData()
  returns (
    id integer
  );
end^

RECREATE PACKAGE BODY MYPACKAGE
AS
BEGIN
  function some_func (
    InValue integer)
  returns INTEGER
  /* just a comment */
  as
  begin
    RETURN InValue * 2;
  end

  PROCEDURE GETINNERDATA(a int)
  RETURNS (
    ID INTEGER
  )
  AS
  DECLARE VARIABLE I INTEGER = 1000;
  BEGIN
    i = a;
    WHILE (I > 0) DO
    BEGIN
      ID = I;
      SUSPEND;
      I = I - 1;
    END
  END

  PROCEDURE GETDATA
  RETURNS (
    ID INTEGER
  )
  AS
  BEGIN
    id = some_func(4);
    FOR SELECT ID
        FROM MYPACKAGE.GETINNERDATA(4)
        INTO :ID
    DO SUSPEND;

    FOR SELECT ID
        FROM "MYPACKAGE".GETINNERDATA(:id)
        INTO :ID
    DO SUSPEND;

    FOR SELECT ID
        FROM getinnerdata(5)
        INTO :ID
    DO SUSPEND;
  END

END
^

SET TERM ; ^

13 сен 18, 17:04    [21673935]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
slay2012
Member

Откуда:
Сообщений: 75
Дублирую сюда...

Я так понял, что исправлено, потому как начало ругаться на отсутствие into (используется as cursor)

Parsing database object definitions...
==== Error ==== : EduProtocol: Missing: INTO (AS)
Script: Line:317 Pos:8
for select
    ...
from ...
as cursor cur
do ...
14 сен 18, 10:04    [21674402]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10228
slay2012,

вообще-то в 3.0 если есть as cursor cur, то into можно и не использовать
14 сен 18, 13:55    [21674716]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
slay2012
Member

Откуда:
Сообщений: 75
Симонов Денис
slay2012,

вообще-то в 3.0 если есть as cursor cur, то into можно и не использовать


Я в курсе, а вот парсер эксперта похоже что нет :)
14 сен 18, 16:00    [21674877]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
slay2012
Member

Откуда:
Сообщений: 75
slay2012
начало ругаться на отсутствие into (используется as cursor)

Parsing database object definitions...
==== Error ==== : EduProtocol: Missing: INTO (AS)
Script: Line:317 Pos:8
for select
    ...
from ...
as cursor cur
do ...


Есть надежда, что это пофиксится?
29 окт 18, 15:16    [21718089]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2816
slay2012
Есть надежда, что это пофиксится?


По "примеру" с тремя многоточиями? Вряд ли.
30 окт 18, 05:31    [21718523]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
slay2012
Member

Откуда:
Сообщений: 75
Пример с многоточиями действительно не корректный...

Вот:
SET TERM ^ ;

CREATE OR ALTER PACKAGE TEST2
AS
begin

function TEST_CURSOR2 (
    A integer,
    B integer)
returns integer;


end^

RECREATE PACKAGE BODY TEST2
AS
begin

function TEST_CURSOR2 (
    A integer,
    B integer)
returns integer
AS
declare variable r int;
begin
    r = 0;
    for with
        res_a as (
            select
                t.a
            from test_table t
            where t.id between :a and :b
        )
    select
        a.a
    from res_a a
    as cursor c
    do begin
        r = r + c.a;
    end
    return r;
end

end
^

SET TERM ; ^

Получаем:
Parsing database object definitions...
==== Error ==== : TEST2: Missing: INTO (AS)
Script: Line:21 Pos:8
30 окт 18, 09:39    [21718590]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2816
Исправил.
31 окт 18, 08:38    [21719792]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
slay2012
Member

Откуда:
Сообщений: 75
IBExpert
Исправил.

Спасибо!

Заводить новую тему не буду, продолжим тут:
CREATE TABLE TEST_TM (
    ID    INTEGER GENERATED BY DEFAULT AS IDENTITY,
    ATTR  INTEGER,
    OBJ   INTEGER,
    V     INTEGER
);

create procedure test_merge (
    attr_id int,
    obj_id int,
    v int
)
returns (
    id int)
as
begin
    merge into test_tm t
    using (
        select
            :attr_id as a,
            :obj_id as o,
            nullif(:v, 0) as v
        from rdb$database
    ) s
    on t.attr = s.a and t.obj = s.o
    when not matched and s.v is not null then
        insert (attr, obj, v)
        values (s.a, s.o, s.v)
    when matched and s.v is null then
        delete
    when matched and s.v <> t.v then
        update set t.v = s.v
    returning new.id into :id;
end



Parsing database object definitions...
==== Error ==== : Procedure TEST_MERGE: Missing: <;> (RETURNING)
Script: Line:18 Pos:15
31 окт 18, 10:06    [21719888]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2816
slay2012

Parsing database object definitions...
==== Error ==== : Procedure TEST_MERGE: Missing: <;> (RETURNING)
Script: Line:18 Pos:15


Исправил.
1 ноя 18, 04:05    [21720999]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
slay2012
Member

Откуда:
Сообщений: 75
IBExpert

Исправил.


Спасибо!

А можно еще обновить IBEScript.exe?
1 ноя 18, 09:19    [21721078]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer Error  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2816
slay2012
А можно еще обновить IBEScript.exe?


Обновил.
1 ноя 18, 10:05    [21721132]     Ответить | Цитировать Сообщить модератору
Все форумы / IBExpert Ответить