Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема при одновременном INSERT + SELECT / 22 сообщений из 22, страница 1 из 1
27.09.2019, 23:41
    #39868213
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Скорее всего проблема вызвана стабильностью курсора

Есть процедура, которая вставляет записи в таблицу и возвращает их ID

Код: 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.
28.
29.
30.
create generator gen_test_id;

create table test (
    id  integer not null
);

alter table test add constraint pk_test primary key (id);

create or alter trigger test_bi for test
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_test_id,1);
end;

create or alter procedure test_sp
returns (
    ID integer)
AS
declare variable n int = 5;
begin
  while (n > 0) do
  begin
    n = n - 1;
    insert into test default values
    returning id into id;
    suspend;
  end
end;



Хочу сделать JOIN с процедурой для получения самой записи.

Исходный запрос
Код: sql
1.
2.
3.
select s.id, t.id 
from test_sp s
left join test t on t.id = s.id


Получаю id id11 null2 null3 null4 null5 null

Хм...
Значит попробуем выбрать все записи, добавим сортировку
Код: sql
1.
2.
3.
4.
5.
select s.id, t.id
from (select id
      from test_sp
      order by 1) s
left join test t on t.id = s.id


Получаю совсем странный результатid id16 null7 78 89 910 10

Такой запрос дает результат аналогичный предыдущему
Код: sql
1.
2.
3.
4.
5.
with
sp as (select id from test_sp order by 1)
select s.id, t.id
from sp s
left join test t on t.id = s.id



Такая модификация процедуры позволяет обойти проблему. В случае с GTT это можно использовать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create or alter procedure TEST_SP
returns (
    ID integer)
AS
declare variable n int = 5;
begin
  while (n > 0) do
  begin
    n = n - 1;
    in autonomous transaction do -- Добавлено
    insert into test default values
    returning id into id;
    suspend;
  end
end



Проверено на fb 3.0.4
На fb 2.5 ошибки нет (что ожидаемо)
...
Рейтинг: 0 / 0
28.09.2019, 01:04
    #39868244
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Шавлюк Евгений,

это же какая-то фантастическая ахинея - вставлять записи в таблицу и тут же "типа это" джойнить с ней же.
...
Рейтинг: 0 / 0
28.09.2019, 23:08
    #39868529
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
kdv,

мне просто интересно - мой коммент самый удачный? Настолько, что дальнейшее обсуждение не требуется?
Просто поразила фантазия автора.
...
Рейтинг: 0 / 0
28.09.2019, 23:40
    #39868532
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
побочные эффекты в селективной процедуре это уже плохо.
Ибо само по себе мало предсказуемо в особенности с JOIN
...
Рейтинг: 0 / 0
29.09.2019, 01:53
    #39868546
Старый плюшевый мишка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Симонов Дениспобочные эффекты в селективной процедуре это уже плохо.
Ибо само по себе мало предсказуемо в особенности с JOIN

Особенно когда по привычке/невнимательности этот селект коммитишь - он же ничего не сделал типа :) А уж в случае исключения не в первой строке :))
...
Рейтинг: 0 / 0
29.09.2019, 12:15
    #39868583
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Шавлюк Евгений,

собственно, раз это связано с нестабильностью курсора, то если это "работает" на 2.5, то работает неправильно, а на 3.0 - правильно.
Заклад на специфику реализации конкретной версии - это всегда плохо, потому что как только неправильное поведение меняется на исправленное, то перестает работать "как было".
...
Рейтинг: 0 / 0
29.09.2019, 16:33
    #39868662
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Зачем мне была нужна такая странная процедура

Есть сложный рекурсивный расчет (набор значений), где нужны и промежуточные значения.
Процедура записывает данные в GTT и вместо всего набора значений возвращает только ID записи с результатом.
А дальше во внешнем запросе (JOIN) для различных отчетов можно выбирать только нужные столбцы.

Сейчас я изменил процедуру так что она возвращает все значения.
Но я считаю, что такое поведение firebird не корректно
...
Рейтинг: 0 / 0
29.09.2019, 17:12
    #39868669
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Шавлюк Евгений,

а я считаю поведение разработчика, который делает JOIN с хранимой процедурой модифицирующей данные, не корректным. Да и вообще SELECT предполагает, что никаких изменений не делается. SQL по своей природе декларативный язык, а это обозначает, что мы не можем закладываться на порядок выполнения отдельных его частей.
И это не только в Firebird.


В тройке поправили стабильность курсора, но работает она ровно до тех пор, пока suspend не будет воткнут внутрь курсора, ибо suspend разрывает сейвпойнт.

Если хочешь правильного поведения, то сначала надо вставить записи, а потом их выбирать, а не попеременно.

Шавлюк ЕвгенийПроцедура записывает данные в GTT и вместо всего набора значений возвращает только ID записи с результатом.

так и пусть записывает. Делай так

Код: sql
1.
2.
3.
4.
5.
6.
while (...) do
begin
  ...
  insert gtt(id) values(:id);
end
for select id from gtt into :id do suspend;
...
Рейтинг: 0 / 0
03.10.2019, 16:53
    #39871248
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Шавлюк Евгений,

верни RDB$DB_KEY ?
...
Рейтинг: 0 / 0
03.10.2019, 17:59
    #39871295
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Arioch,

А какая разница если данных не видно из-за особенностей курсора?

Ну и результат не отличается от поиска по ID
...
Рейтинг: 0 / 0
04.10.2019, 08:10
    #39871454
pastor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Шавлюк ЕвгенийArioch,

А какая разница если данных не видно из-за особенностей курсора?

Ну и результат не отличается от поиска по ID

А что мешает складывать агрегаты во вторую временную табличку?
Я книшку прочитал про DWH, создал себе набор временных табличек с измерениями, фактами, атрибутами и до кучи с агрегатами. И все мясорубные отчеты через них делаю.
...
Рейтинг: 0 / 0
04.10.2019, 17:37
    #39871807
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
pastor,

что за книжка ?
...
Рейтинг: 0 / 0
04.10.2019, 20:25
    #39871884
pastor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Ariochpastor,

что за книжка ?

"D:\Книги\Программирование\DWH\MSSQL-Kimball_files"
"D:\Книги\Программирование\DWH\Digital Press - Oracle9iR2 Data Warehousing - 2003.chm"
"D:\Книги\Программирование\DWH\Idef1x.pdf"
"D:\Книги\Программирование\DWH\John Wiley & Sons - IBM Data Warehousing. With IBM Business Intelligence Tools.pdf"
"D:\Книги\Программирование\DWH\MSSQL-Kimball.htm"
"D:\Книги\Программирование\DWH\Prentice Hall PTR - Oracle DBA Guide to Data Warehousing and Star Schemas.chm"
"D:\Книги\Программирование\DWH\Wiley & Sons - Building The Data Warehouse. Third Edition.pdf"
"D:\Книги\Программирование\DWH\Wiley & Sons - The Data Warehouse Toolkit. Second Edition.pdf"
...
Рейтинг: 0 / 0
04.10.2019, 20:50
    #39871894
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Среди нас маньяк.
...
Рейтинг: 0 / 0
07.10.2019, 11:54
    #39872468
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
04.10.2019 20:50, Vlad F пишет:
> Среди нас маньяк.

несексуальный...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.10.2019, 12:06
    #39872474
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Название придумал: "Синдром Плюшкина и архитектура операционных баз данных"
...
Рейтинг: 0 / 0
07.10.2019, 12:13
    #39872478
pastor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Arioch,

чую, за умение читать опять сжигать начнут.

может оно так и надо.

пятикнижие простолюдинам ни к чему. будет с них псалтыря.
...
Рейтинг: 0 / 0
07.10.2019, 12:53
    #39872509
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Тут ещё есть такой момент

pastorЯ книшку прочитал про DWH

Проговорено было про некую особо удачную книгу, повлиявшую на программиста, открывшую ему глаза.

На вопрос про источник озарения - дамп всех книжек, случившихся на пути поиска Той Единственной Самой Важной.

Ну вот так это со стороны выглядит.
...
Рейтинг: 0 / 0
07.10.2019, 13:08
    #39872524
pastor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
AriochТут ещё есть такой момент

pastorЯ книшку прочитал про DWH

Проговорено было про некую особо удачную книгу, повлиявшую на программиста, открывшую ему глаза.

На вопрос про источник озарения - дамп всех книжек, случившихся на пути поиска Той Единственной Самой Важной.

Ну вот так это со стороны выглядит.

у любой информации есть не только источник, но и приемник.
за особенности восприятия на приемнике - я пас.

ЗЫ

1. да я умею читать
2. я могу читать не на русском
3. я могу прочитать более одной книжки за день
4. это не дамп, это книжки, которые я посчитал нужным и полезным оставить
5. я воспринимаю это как один источник информации. детали выбрасываю из памяти при переходе к другой задаче, использованные источники стараюсь сохранить
...
Рейтинг: 0 / 0
07.10.2019, 13:12
    #39872527
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
07.10.2019 13:08, pastor пишет:
>
> у любой информации есть не только источник, но и приемник.
> за особенности восприятия на приемнике - я пас.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.10.2019, 13:38
    #39872552
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Мимопроходящий,

- а где Ленин?
- написано же, "Ленин в Польше" !
...
Рейтинг: 0 / 0
07.10.2019, 13:42
    #39872556
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при одновременном INSERT + SELECT
Маньяк, он и есть маньяк.))
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема при одновременном INSERT + SELECT / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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