powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема при одновременном INSERT + SELECT
22 сообщений из 22, страница 1 из 1
Проблема при одновременном INSERT + SELECT
    #39868213
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего проблема вызвана стабильностью курсора

Есть процедура, которая вставляет записи в таблицу и возвращает их 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
Проблема при одновременном INSERT + SELECT
    #39868244
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгений,

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

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

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

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

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

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

а я считаю поведение разработчика, который делает 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
Проблема при одновременном INSERT + SELECT
    #39871248
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгений,

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

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

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

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

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

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

что за книжка ?
...
Рейтинг: 0 / 0
Проблема при одновременном INSERT + SELECT
    #39871884
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблема при одновременном INSERT + SELECT
    #39871894
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Среди нас маньяк.
...
Рейтинг: 0 / 0
Проблема при одновременном INSERT + SELECT
    #39872468
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
04.10.2019 20:50, Vlad F пишет:
> Среди нас маньяк.

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

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

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

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

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

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

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

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

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

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

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

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

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

ЗЫ

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


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

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


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