powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / IBEBlock: ошибки, вопросы, предложения - сюда
25 сообщений из 71, страница 2 из 3
IBEBlock: ошибки, вопросы, предложения - сюда
    #40007052
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
CURRENT_TIMESTAMP, по идее, тоже TIMESTAMP


Чего-то ты не договариваешь... Вот тестовый пример:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
EXECUTE IBEBLOCK
AS
BEGIN
  execute statement 'CREATE TABLE TEST_TIMESTAMP (TS  TIMESTAMP)';
  commit;

  insert into test_timestamp (ts) values (current_timestamp);
  commit;

  FOR
    SELECT
      ts as ts1,
      CURRENT_TIMESTAMP AS ts2
    FROM
      test_timestamp
    AS CURSOR
      cur
  DO
  begin
    var_t1 = cur.ts1;
    var_t2 = cur.ts2;
  end;
END;



В отладчике вижу, что все ОК: значения обеих переменных одинаково сформатированы и отображаются - как таймштамп, а не как строка.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40007693
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
В отладчике вижу, что все ОК:
В отладчике да.

Вот тебе мой пример

Подготовка
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SET SQL DIALECT 3;

CREATE TABLE LOGS (
    ID           BIGINT GENERATED BY DEFAULT AS IDENTITY,
    "TIMESTAMP"  TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
    "MESSAGE"    BLOB SUB_TYPE 1 SEGMENT SIZE 128
);

ALTER TABLE LOGS ADD CONSTRAINT PK_LOGS PRIMARY KEY (ID);

SET TERM ^ ;

CREATE OR ALTER PROCEDURE sp_d_log (
  in_msg TYPE OF COLUMN logs."MESSAGE")
AS
BEGIN
  IN AUTONOMOUS TRANSACTION DO
    INSERT INTO logs (
      "MESSAGE"
    ) VALUES (
      :in_msg
    );
END^

SET TERM ; ^

Скрипт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
EXECUTE IBEBLOCK
AS
BEGIN
  FOR
    SELECT
      CURRENT_TIMESTAMP AS datetime
    FROM
      rdb$database t
    AS CURSOR
      cur
  DO
    EXECUTE PROCEDURE sp_d_log(cur.datetime);

  EXECUTE PROCEDURE sp_d_log(CURRENT_TIMESTAMP);
END;

Результат
IDTIMESTAMPMESSAGE15412.10.2020 12:57:19.20412-OCT-2020 12:57:19.000015512.10.2020 12:57:19.2042020-10-12 12:57:19.2040
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40007723
Dimbuch®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В процедуре надо указать тип
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE OR ALTER PROCEDURE sp_d_log (
  in_msg TYPE OF COLUMN logs."MESSAGE")
AS
BEGIN
  IN AUTONOMOUS TRANSACTION DO
    INSERT INTO logs (
      "MESSAGE"
    ) VALUES (
      CAST(:in_msg AS TIMESTAMP)
    );
END
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40007789
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

Вот тебе мой пример


Хех, так это совсем другое дело, и в нем все правильно:

1. EXECUTE PROCEDURE sp_d_log(cur.datetime) сначала препарируется как EXECUTE PROCEDURE sp_d_log(:Param), затем параметру через AsString присваивается значение cur.datetime. Здесь и происходит конвертация из таймштампа в строку.

2. EXECUTE PROCEDURE sp_d_log(CURRENT_TIMESTAMP) отправляется на сервер как есть, конвертация выполняется сервером.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40007849
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
2. EXECUTE PROCEDURE sp_d_log(CURRENT_TIMESTAMP) отправляется на сервер как есть, конвертация выполняется сервером.
Хорошо. А откуда тогда такое поведение?
_Vasilisk_
Код: sql
1.
2.
3.
4.
CREATE TABLE TEST (
    ID         INTEGER NOT NULL,
    DATETIME   TIMESTAMP
);

_Vasilisk_
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
EXECUTE IBEBLOCK
AS
BEGIN
  FOR
    SELECT
      t.id,
      t.datetime
    FROM
      test t
    AS CURSOR
      cur
  DO
    EXECUTE PROCEDURE sp_d_log(cur.datetime);
END;


В лог пишется "2020-10-08 17:07:12.1620"


P.S. Завтра соберу полный пример
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40007923
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Хорошо. А откуда тогда такое поведение?


Я ж только что объяснил, п.1. Это равносильно выполнению запроса в SQL редакторе:
Код: plsql
1.
EXECUTE PROCEDURE sp_d_log(cast(:param as timestamp))


В лог попадет клиентский вариант конвертации таймштампа в строку, а не серверный.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40012499
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нельзя ли сделать так, чтобы
Код: sql
1.
2.
ibec_Cast(TRUE, __typeString);
ibec_Cast(FALSE, __typeString);

возвращало TRUE и FALSE, а не -1 и 0?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40012948
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
А нельзя ли сделать так, чтобы
Код: sql
1.
2.
ibec_Cast(TRUE, __typeString);
ibec_Cast(FALSE, __typeString);

возвращало TRUE и FALSE, а не -1 и 0?


А если у кого-то это уже используется в коде, то и фиг с ним, да?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40013037
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для функции ibec_CreateConnection ConnectionType __ctMySQL поддерживается? Если да, то в каком формате нужно задавать параметры подключения?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40013048
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Для функции ibec_CreateConnection ConnectionType __ctMySQL поддерживается?


Никогда не поддерживался. И в принципе MySQL давно не поддерживается.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40015053
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему для этого кода
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
EXECUTE IBEBLOCK
AS
BEGIN
  IF (
    FALSE AND
    ibec_MessageDlg('Test', __mtWarning, __mbOK) = __mrYes
  ) THEN
    ibec_ShowMessage('Nothing');
END; 

появляется сообщение Test? Или сокращенные булевские вычисления не реализованы?
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40015127
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Или сокращенные булевские вычисления не реализованы?


Именно так. Оптимизированы только некоторые функции типа ibec_coalesce.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40036276
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert зависает SQL редакторе на конструкции:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
EXECUTE IBEBLOCK
AS
  DECLARE PERIOD_ID INTEGER = null;
BEGIN
  merge into PS_PROPOSE_SOURCE as dest
      using TMP_RAD_PS_SELLERS_ALL as src
      on dest.PERIOD_ID = src.PERIOD_ID and dest.ORGANIZATION_ID = src.ORGANIZATION_ID and dest.PERIOD_ID = :PERIOD_ID
    when matched then delete;

END;


Коннект на базу необязательный.
Загрузка процесса 100%
IBExpert 2021.1.7.1
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40036336
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs
IBExpert зависает SQL редакторе на конструкции:


Исправил.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40036484
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Viktor_bs
IBExpert зависает SQL редакторе на конструкции:


Исправил.

Спасибо!
Немного не до конца...ошибка без коннекта на базу )
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037005
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs

Немного не до конца...ошибка без коннекта на базу )


Исправил.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037082
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Viktor_bs

Немного не до конца...ошибка без коннекта на базу )


Исправил.

Опять не до конца :)
Происходит выход из цикла при первой итерации без каких-либо ошибок...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
EXECUTE IBEBLOCK
AS
  DECLARE PERIOD_ID INTEGER = NULL;
BEGIN
  I = 0;

  -- Инициализация и расчет опорного периода
  HIGHDIM = 3;
  FOR I = 0 TO HIGHDIM DO
  BEGIN
    --PERIOD_ID = MY_PERIODS[I];
    IBEC_PROGRESS(I);


    merge into PS_PROPOSE_SOURCE as dest
        using TMP_RAD_PS_SELLERS_ALL as src
        on dest.PERIOD_ID = src.PERIOD_ID and dest.ORGANIZATION_ID = src.ORGANIZATION_ID and dest.PERIOD_ID = :PERIOD_ID
      when matched then delete;

    ibec_Sleep(100);

    commit;

  end

  ibec_MessageDlg(I, 0, 0);
END;
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037095
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs

Опять не до конца :)


Я не буду сам придумывать MERGE, который должен работать.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037098
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Viktor_bs

Опять не до конца :)


Я не буду сам придумывать MERGE, который должен работать.

И не нужно ничего придумывать. Выполнение MERGE при первой итерации приводит к завершению цикла и выходу из IBEBlock, такого ведь быть не должно, либо следующая итерация либо ошибка.
Даже ibec_MessageDlg не вызывается.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037201
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs
Выполнение MERGE при первой итерации приводит к завершению цикла и выходу из IBEBlock, такого ведь быть не должно, либо следующая итерация либо ошибка.


У меня твой MERGE по очевидным причинам не заработает. А если он не заработает, то возникнет эксепшен и на выход. Здесь все правильно.
А работающий MERGE мне придумывать лень, чтобы проверить.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037225
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Viktor_bs
Выполнение MERGE при первой итерации приводит к завершению цикла и выходу из IBEBlock, такого ведь быть не должно, либо следующая итерация либо ошибка.


У меня твой MERGE по очевидным причинам не заработает. А если он не заработает, то возникнет эксепшен и на выход. Здесь все правильно.
А работающий MERGE мне придумывать лень, чтобы проверить.

А так?
Код: sql
1.
2.
CREATE table PS_PROPOSE_SOURCE (PERIOD_ID integer, ORGANIZATION_ID integer);
CREATE table TMP_RAD_PS_SELLERS_ALL  (PERIOD_ID integer, ORGANIZATION_ID integer);


p.s. Firebird3
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40037311
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs

А так?


Другое дело. Исправил.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40094016
Spz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spz
Гость
Добрый день!
У меня 1 ошибка и 1 пожелание.

Ошибка или баг: (IBExpert 2021.8.31.1)
при редактировании вьюшки появляется вкладка "Скрипт пересоздания",
в которой генерится что-то совершенно другое, чем редактируемая вьюшка.

И еще пожелание очень облегчающее жизнь рядовому программеру:
Сделать чтобы IBExpert умел запускать запросы в тексте окна SQL editor,
отделенные ; (подобно PL SQL Developer) и исполнять запрос где находится
курсор без необходимости точного выделения того, что надо исполнить.

Например
Select * from employees;
Select * from lamers;
Select * from firms;
если курсор находится во второй строке, то
по F9 выполнится второй запрос.

Алгоритм простой:
1. От курсора идем назад до первого знака ; или до начала полного текста, запоминаем как х1 (начало блока)
2. От курсора идем вперед до первого знака ; или до конца полного текста, запоминаем как x2 (конец блока)
3. Исполняем запрос, скопированный от x1 до x2.

Заранее спасибо.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40094036
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spz
Добрый день!
У меня 1 ошибка и 1 пожелание.


Какое отношение они имеют к этой теме?

1. Это именно он - скрипт пересоздания представления.

2. Разделить запросы пустой строкой и использовать Ctrl+Shift+F9.
...
Рейтинг: 0 / 0
IBEBlock: ошибки, вопросы, предложения - сюда
    #40094102
Spz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spz
Гость
Прошу прощения, невнимательно прочитал название темы.
Мне пересоздать сообщение или можно перенести его в корень?
...
Рейтинг: 0 / 0
25 сообщений из 71, страница 2 из 3
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / IBEBlock: ошибки, вопросы, предложения - сюда
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]