powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Взаимодействие клиентов с БД.
25 сообщений из 323, страница 8 из 13
Взаимодействие клиентов с БД.
    #39963473
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
После UPDATE у клиента и сервера разные ts_Entity

Во-первых, не ясно, каким образом. Возможно, конечно, Вы там ещё для этого триггер повесили, но не суть. В любом случае тот update, который я привёл, делает ровно то же самое и возвращает "новый" ts.

ВМоисеев
Уточните, о каком удвоении нагрузки Вы пишите?

Ну наконец-то. Не пробовали задуматься над этим вопросом хотя бы на прошлой странице, раз уж это Вам не очевидно?

Тогда очередной ликбез. Реляционные СУБД можно рассматривать как программы, оперирующие данными на диске. Дисковый ввод-вывод буферизуется блоками стандартного объёма (иногда их называют страницами или прочими подобными словами). Например, Oracle по умолчанию использует блоки размером 8Кб. В других СУБД могут быть технические отличия, но суть везде одна. Если Вам нужно прочитать один байт - будут прочитаны как минимум восемь килобайт; если Вам нужно записать один байт - будут записаны как минимум восемь килобайт (а перед этим, если потребуется, ещё и прочитаны). Но для того, чтобы добраться до этого байта, нужно ещё и узнать его адрес на диске - а для этого в случае доступа по первичному ключу, скорее всего, будет использован индекс. То есть с диска будут считаны ещё килобайт пятьдесят индексной информации, чтобы добраться до этого байта. То есть даже очень мелкое изменение оказывается довольно дорогой операцией.

Ситуацию отчасти спасает кэширование. Считанные блоки данных кэшируются в оперативной памяти и позволяют следующие операции с этими данными уже без нового обращения к диску. Однако, сервер БД - высококонкурентная среда. За кэш данных борются тысячи параллельно идущих транзакций, каждая из которых пытается положить в него свои данные и вытеснить чужие. Если пустить это на самотёк - получится огромный бессмысленный бардак, который и станет узким местом системы. Стратегии и настройки кэширования - одна из стандартных "головных болей" разработчиков СУБД, и в целом эффективность кэширования - важнейший показатель качества СУБД и ожидаемой скорости её работы. В итоге разработчик не имеет реальных шансов сказать, какая страница данных в какой момент времени будет закеширована или нет, поэтому в оценках ресурсоёмкости операций используют логические чтения - по сути "обращение к диспетчеру за блоком данных", понимая, что с вероятностью X это будет чтение из памяти, а с вероятностью (1-X) - с диска, где X мало зависит от разработчика конкретного куска функциональности, а определяется железом сервера, настройками, размером базы, количеством и разнообразием других операций с этими данными и т. д. и т. п.

Дальнейшее проще показать статистикой. Я приведу для Oracle, но как я уже сказал, картина плюс-минус одинакова везде. Для начала подготовим данные:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> create table t$data(id integer not null, text varchar2(100 char));
Table created

SQL> insert into t$data select rownum, lpad(rownum, '0', 100) from dual connect by level <= 1e7;
10000000 rows inserted

SQL> alter table t$data add constraint t$data_pk primary key (id);
Table altered


Теперь посмотрим, сколько логических чтений уходит на update.

Код: plsql
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
SQL> set autotrace on
SQL> update t$data set text = 'changed' where id = 666666 returning text into :result;

1 row updated.

Execution Plan
----------------------------------------------------------                      
Plan hash value: 2890335233                                                     
                                                                                
--------------------------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT   |           |     1 |   215 |     3   (0)| 00:00:01 |
|   1 |  UPDATE            | T$DATA    |       |       |            |          |
|*  2 |   INDEX UNIQUE SCAN| T$DATA_PK |     1 |   215 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------------
                                                                                
Predicate Information (identified by operation id):                             
---------------------------------------------------                             
                                                                                
   2 - access("ID"=666666)                                                      


Statistics
----------------------------------------------------------                      
          1  recursive calls                                                    
          2  db block gets                                                      
          3  consistent gets                                                    
          1  physical reads                                                     
        308  redo size                                                          
        584  bytes sent via SQL*Net to client                                   
        588  bytes received via SQL*Net from client                             
          3  SQL*Net roundtrips to/from client                                  
          1  sorts (memory)                                                     
          0  sorts (disk)                                                       
          1  rows processed    

SQL> rollback;

Rollback complete.



Добавим к этому то, что уходит на select

Код: plsql
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.
31.
32.
33.
34.
35.
SQL> set autotrace traceonly;
SQL> select text from t$data where id = 666666;


Execution Plan
----------------------------------------------------------                      
Plan hash value: 773027716                                                      
                                                                                
-----------------------------------------------------------------------------------------                                                                       
| Id  | Operation                   | Name      | Rows  | Bytes | Cost (%CPU)| Time     |                                                                       
-----------------------------------------------------------------------------------------                                                                       
|   0 | SELECT STATEMENT            |           |     1 |   215 |     3   (0)| 00:00:01 |                                                                       
|   1 |  TABLE ACCESS BY INDEX ROWID| T$DATA    |     1 |   215 |     3   (0)| 00:00:01 |                                                                       
|*  2 |   INDEX UNIQUE SCAN         | T$DATA_PK |     1 |       |     2   (0)| 00:00:01 |                                                                       
-----------------------------------------------------------------------------------------                                                                       
                                                                                
Predicate Information (identified by operation id):                             
---------------------------------------------------                             
                                                                                
   2 - access("ID"=666666)                                                      


Statistics
----------------------------------------------------------                      
          0  recursive calls                                                    
          0  db block gets                                                      
          4  consistent gets                                                    
          0  physical reads                                                     
          0  redo size                                                          
        347  bytes sent via SQL*Net to client                                   
        368  bytes received via SQL*Net from client                             
          2  SQL*Net roundtrips to/from client                                  
          0  sorts (memory)                                                     
          0  sorts (disk)                                                       
          1  rows processed



И Вам остаётся самостоятельно догадаться, откуда в Вашем замечательном решении вдруг берётся паразитное удвоение нагрузки на сервер.

ВМоисеев
И право, не Вам говорить о хамстве.

Серьёзно? Решительно не вижу, с чего бы вдруг мне не говорить о хамстве. Кажется, Вы снова пытаетесь что-то переложить со своей головы на здоровую.
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963503
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 15:35 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1325462&msg=22141364][22141364]
>Вы по делу когда хоть что-то сказали?
<
Начало здесь .
Ваш ответ .
Я привел пример, где использую ХП - UPDATE.
Далее здесь , здесь и здесь .
Далее можно это и это .
Мой ответ .
Текущий вариант:
Код: c#
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.
    //-- UPDATE 
    //-- Обработка нажатия кнопки сохранения изменений записи в базу данных 
    //=========================================================================================================
    private void btc_Сохранить_Click(object sender, RoutedEventArgs e) {
      if (!bl_Разрешение) return; 
      try {
        wspErr = null; if (dgv_Entity.SelectedIndex == -1) return;  //-- Нет выбора
        bl_Разрешение = false;  //-- Запрещаем пользавательский интерфейс
        //-- Получим индекс элемента коллекции
        xrow = (row_Entity)dgv_Entity.SelectedItem; yrow = (row_Entity)xrow.Clone();
        iRow = oc_Entity.IndexOf(xrow);
        
        //-- выполнение хранимой процедуры
        wsp.sp_Параметры(3);
        wsp.sp_Параметр("pk_Entity", xrow.pk_Entity); wsp.sp_Параметр_ts("ts_Entity", xrow.ts_Entity);
        wsp.sp_Параметр("str_Отдел", xrow.str_Отдел);
        xrow = null; lst_Entity = null;
        wsp.Entity_SP("au_Отделы_upd", wsp.sp_Upd, RowToEntity_upd); wspErr = wsp.wspErr;

        if (xrow == null) throw new Exception("Ошибка выполнения операции");
        dgv_Entity.CancelEdit(); xrow.chb_Entity = false;
        oc_Entity.RemoveAt(iRow); oc_Entity.Insert(iRow, xrow); dgv_Entity.SelectedIndex = iRow;
      }
      catch (Exception ex) { wspErr = ex.Message; }
      finally {
        if (wspErr != null) { MessageBox.Show(wspErr, caption_Entity, MessageBoxButton.OK); }
        wspErr = null; yrow = null; bl_Разрешение = true;  //-- Разрешение выполнения функционала компонент
      }
    }


По завершению ХП UPDATE клиентский метод имеет:
1. yrow - старые параметры сущности
2. xrow - новые параметры сушности
3. wspErr - код завершения.
Что здесь плохого.
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963513
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>softwarer, сегодня, 16:36 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1325462&msg=22141454][22141454]
>Ну наконец-то …
<
Спасибо за ликбез. Но клиент должен получить новый ts_Entity, желательно за одно обращение к базе данных, см. здесь .
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963515
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Спасибо за ликбез. Но клиент должен получить новый ts_Entity

Какое именно слово в

Код: plsql
1.
2.
3.
4.
returning
  отдел, ts
into
  :отдел, :ts


Вам непонятно?
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963516
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>softwarer, сегодня, 16:36 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1325462&msg=22141454][22141454]
>Дальнейшее проще показать статистикой
<
Давайте по-взрослому - напишите ХП и приведите данные по её работе.
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963521
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Давайте по-взрослому - напишите ХП и приведите данные по её работе.

У трассировки хранимок больше геморроя с выводом результатов в текстовом виде, а итог тот же самый. Если Вы думаете, что селект внутри хранимой процедуры вдруг перестанет запрашивать данные - подумайте ещё раз.
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963541
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>softwarer, сегодня, 17:55 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1325462&msg=22141517][22141517]
>Какое именно слово в …
<
returning.
Найдите его здесь .
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963553
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
>softwarer, сегодня, 17:55 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1325462&msg=22141517][22141517]
>Какое именно слово в …
<
returning.
Найдите его здесь .

Вы свою же ссылку читали?

СсылкаВ инструкции UPDATE можно использовать имена переменных для показа старых и новых значений , но только в том случае, если инструкция UPDATE обрабатывает одну запись. Если инструкция UPDATE затрагивает несколько записей, для возвращения старых и новых значений каждой записи используйте предложение OUTPUT.


https://docs.microsoft.com/ru-ru/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-ver15
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963576
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>softwarer, сегодня, 17:55 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1325462&msg=22141517][22141517]
>Какое именно слово в …
<
Меня не устраивает это - "Предложение RETURNING указывает, что команда UPDATE должна вычислить и возвратить значения для каждой фактически изменённой строки."
Если UPDATE … RETURNING не изменил ни одной записи, что будет возвращено клиенту?
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963580
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Меня не устраивает это

Примите величественную позу и скажите вендору, что Вас ещё не устраивает. Бьюсь об заклад, список выйдет длинным. А он, без сомнения, прислушается.

ВМоисеев
Если UPDATE … RETURNING не изменил ни одной записи, что будет возвращено клиенту?

Вы точно уверены, что я должен за Вас прочитать доку и доступными словами разжевать Вам ответ?
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963614
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>softwarer, сегодня, 19:38 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1325462&msg=22141603][22141603]
>Вы точно уверены…
<
Да Вы большой оригинал - на мое отвечаете этим , представления не имея, как сиё работает.
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963656
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Да Вы большой оригинал - на мое отвечаете этим , представления не имея, как сиё работает.

Я знаю как работает returning. И Вы тоже могли бы узнать, если бы открыли документацию и прочитали. Если же Вы считаете, что с Вами должны нянчиться - это объясняет, почему Вы до сих пор не достигли даже уровня junior-а, способного пройти собеседование.
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963703
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>softwarer, сегодня, 21:46 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1325462&msg=22141702][22141702]
>Я знаю как работает returning...
<
Сомневаюсь. Судя по этому - "returning_clause
Returns values from updated rows ...If the statement does not affect any rows, the values of the variables specified in the RETURNING clause are undefined"
Ваш код пустышка
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963710
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Ваш код пустышка

Ох, какое же ты пустое трепло. Лучше открой документацию по returning в Postgre и прочитай там, что он делает ровно то же, что и твой селект. Вот прямо английским языком написано - возвращает те же данные, которые вернул бы селект этих полей из affected строк. Так что ты только что назвал пустышкой собственное решение, красавец
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963831
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
По завершению ХП UPDATE клиентский метод имеет:
1. yrow - старые параметры сущности
2. xrow - новые параметры сушности
3. wspErr - код завершения.
Что здесь плохого.


Всё плохо.

1. Ваш код крайне тяжело сопровождать.
2. Код невозможно протестировать, так как часть логики в БД, часть логики в клиентском коде.
3. ХП на апдейт выполняет две операции: обновление и возврат данных, хотя у вас уже есть отдельная ХП на возврат данных, значит вы дублируете код -- очень велика вероятность сделать ошибку, поддерживать два разных кода возврата одних и тех же данных -- очень плохо.
4. ХП обновления выполняет две разных операций, что нарушает принцип единственной обязанности.
5. Код обновления прибит гвоздями к одному единственному способу блокировки, а это ни что иное, как костыли.
6. Ваш код представляет из себя 80% откровенного мусора и дублирования и 20% (в лучшем случае!) хоть какой-то полезной логики. С увеличением количества сущностей, такой код становится сложнее и сложнее сопровождать, абсолютно невозможно провести вменяемый рефакторинг или хоть какие-то изменения без переписывания всего, или без монотонных одних и тех же изменений.

Плохой код это не проблема. Никто не способен писать идеальный код всегда. Люди развиваются, растут, умеют учиться. Не в коде проблема. Проблема в вас. Вы не желаете учиться и развиваться.

Не понимаю чего вы хотите. Зачем нам вот это каждый раз впариваете. Вы там на медаль что-ли идёте по твердолобости? Может кто-то ставки принимает? Чё за фигня вообще с вами происходит??
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963832
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Но клиент должен получить новый ts_Entity, желательно за одно обращение к базе данных, см. здесь .


Я даже боюсь спрашивать. С какого перепугу "должен" и с чего вы взяли, что это "желательно"?
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963854
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Плохой код это не проблема.

Личный опыт это если в проекте хотя бы только 50% говнокода, то это уже очень хороший проект. Есть куда более страшные вещи, чем говнокод :))
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963935
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>softwarer, вчера, 23:01 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1325462&msg=22141778][22141778]
>Ох, какое же ты пустое трепло... Так что ты только что назвал пустышкой собственное решение, красавец
<
Хамства Вам положим не занимать.
Ну да ладно, перейдем к сути.
Что предлагаю я - Здесь мой код UPDATE. Я работаю с оптимистической блокировкой. Поэтому есть вероятность того, что моя копия сущности на рабочем компьютере не совпадает с оригиналом. Опираясь на информацию копии, принимаю решение о её модификации с последующим изменением оригинала. Понятно что оригинал может быть кем-то изменен, но я этого не знаю.
Код:
Код: c#
1.
2.
3.
      UPDATE "tbl_Отделы" SET "str_Отдел" = "$str_Отдел" 
      WHERE (("pk_Entity" = "$pk_Entity") and ("ts_Entity" = "$ts_Entity"));
      exception when others then  ErrorVar := 1;


делает попытку изменения оригинала. Возможны ситуации:
1. операция ок, клиенту нужно передать timestamp, ибо оно показывает, что оригинал и копия клиента тождественны.
2. имеет место быть не штатная ситуация, что приведет флаг ошибки в 1.
- сбойнуло железо (?)
- другой клиент мог удалить оригинал сущности
- другой клиент мог изменить оригинал сущности
Код:
Код: c#
1.
    if ErrorVar = 1 then 


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

Здесь Ваше предложение.
В случае штатной ситуации результаты наших решений совпадают.
А как поведет Ваш код в случае не штатной ситуации - другой клиент мог изменить оригинал сущности-.
Повторяю
"Returns values from updated rows ...If the statement does not affect any rows, the values of the variables specified in the RETURNING clause are undefined"
и меня большие подозрения, что я не получу значение оригинала.
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963941
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 04:12 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1325462&msg=22141942][22141942]
>Я даже боюсь спрашивать. С какого перепугу "должен" и с чего вы взяли, что это "желательно"?
<
Я считаю, что пользователь может менять только тот оригинал базы, что совпадает с его локальной копией.
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39963946
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 04:11 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1325462&msg=22141941][22141941]
>Всё плохо
<
Я думаю иначе.
Понятно, что Ваши измы мне по барабану.
Поэтому, давайте оставим в покое философию и графоманию и будем обсуждать конкретные проблемы. В текущей ситуации - ХП и UPDATE.
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39964005
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
2. Код невозможно протестировать, так как часть логики в БД, часть логики в клиентском коде.

Н-да. До сих пор Вы оставались единственным, кроме меня, кто не говорил глупостей.
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39964027
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Что предлагаю я

Что "предлагаешь" ты - всем было понятно ещё позавчера. Равно как и то, как это работает.

Как отработает под Ораклом то, что написал я - можешь посмотреть. Как отработает аналог под Postgre - ну смотря кто и как напишет. Если задашься целью, чтобы было ещё хуже чем у тебя - без сомнения, сумеешь сделать именно так.

Ну а свои подозрения по поводу того, чего ты не получишь, если кто-нибудь изменил id записи... Спасибо, смешно.
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39964049
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
ВМоисеев
Что предлагаю я

Что "предлагаешь" ты - всем было понятно ещё позавчера. Равно как и то, как это работает.

Как отработает под Ораклом то, что написал я - можешь посмотреть. Как отработает аналог под Postgre - ну смотря кто и как напишет. Если задашься целью, чтобы было ещё хуже чем у тебя - без сомнения, сумеешь сделать именно так.

Ну а свои подозрения по поводу того, чего ты не получишь, если кто-нибудь изменил id записи... Спасибо, смешно.

по докам они работают одинаково
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39964063
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos
по докам они работают одинаково

Думаю, пафос Владимира вызван в основном тем, что он тоже смотрит доки, не прочитав и не поняв смысл самого update-а и не задавшись вопросом "почему он отличается от моего". В прошлый раз он бросил поверхностный взгляд и даже не увидел returning, а когда я ткнул его в это носом - полез копать про returning, так и не посмотрев в написанный update, а просто решив "ну наверняка то же самое, что у меня, только с добавлением returning".

У Оракла в случае апдейта нуля строк в переменной просто сохранится предыдущее значение. Ну и sql%rowcount будет равно нулю, само собой. Как будет у Postgre - не знаю. Достаточно фразы из доки про "тот же результат, что в селекте", чтобы сказать, что будет ровно как во владимировской нетленке - с точностью до того, что дока врёт, конечно.
...
Рейтинг: 0 / 0
Взаимодействие клиентов с БД.
    #39964093
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer


У Оракла в случае апдейта нуля строк в переменной просто сохранится предыдущее значение. Ну и sql%rowcount будет равно нулю, само собой. Как будет у Postgre - не знаю. Достаточно фразы из доки про "тот же результат, что в селекте", чтобы сказать, что будет ровно как во владимировской нетленке - с точностью до того, что дока врёт, конечно.


ну, если доки не врут, то получается, что нечего было наезжать на бедного Моисеева по части нагрузки на сервер?
...
Рейтинг: 0 / 0
25 сообщений из 323, страница 8 из 13
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Взаимодействие клиентов с БД.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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