metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-04-03 01:06 am

В Советской Белоруссии SQL разжигает айседа

http://theiced.livejournal.com/238346.html
Собственно, про кобол я не знаю, на дельфи пишу уже 15 лет и никак избавится от него не могу (слишком много легаси кода), а вот про SQL я с ним не согласен.
Сам по себе SQL очень хорошо подходит для генерации отчетов. Если отчет сводится к фильтрации-сортировке-группировке множеств - идеально. С рекурсивными CTE - еще и деревья можно обрабатывать, не особо включая мозг. Всунув поверх этого минимальных размеров постобработку на какой-нибудь функциональщине, можно сделать почти любой отчет, пришедший в голову свихнувшимся на Excel выпускникам нархоза, работающим в минстате, минфине и МНС.

Но когда доходит до процедурных расширений, API между СУБД и клиентскими приложениями или каких-нибудь вещей, которые забыли вовремя добавить в стандарт - начинается полная, немыслимая жопа.
Например, проклятая тема - генерация автоинкрементных ключей и возвращение значений автоматически заполненных полей. Кто во что горазд - identity, генераторы, sequence, функции (в каждой СУБД названные по разному), returning, заебы на тему "вызывать в той же транзакции и сессии" и прочая и прочая. Про вариации на тему "вернуть поле, которое заполняется автоматически, но не является ключом/identity" лучше даже не думать.
Неудивительно, что люди при первой же возможности сбегают в ORM (которые являются уже второй производной от всего этого маразма и несут на себе его неизгладимый след).

[identity profile] gds.livejournal.com 2013-04-02 10:57 pm (UTC)(link)
> Кто во что горазд - identity, генераторы, sequence, функции (в каждой СУБД названные по разному), returning, заебы на тему "вызывать в той же транзакции и сессии" и прочая и прочая.

для нужной бд -- нужный способ получить. Не sql? Ок, лол.

> Про вариации на тему "вернуть поле, которое заполняется автоматически, но не является ключом/identity" лучше даже не думать.

что в оракле, что в постгресике -- returning и всё. А что, есть другие реляционные субд?

[identity profile] fraks-nsk.livejournal.com 2013-04-03 01:06 am (UTC)(link)
Есть - Firebird. Returning там уже сделали, а генераторы и sequence в нем - одно и то же, просто разный синтаксис для доступа к одному и тому же, типа generator - это для обратной совместимости а sequence - штоп усе по стандарту было, ну и вероятно для перебежавших ораклоидов что бы привычно было.

[identity profile] metaclass.livejournal.com 2013-04-03 06:16 am (UTC)(link)
В постгресе есть returning? а зачем тогда currval('...')?

[identity profile] avnik.livejournal.com 2013-04-03 06:42 am (UTC)(link)
в постгрессе returning, начиная с 8.2 по моему.
В mysql поле в reply пакете (last_insert_id рядом с affected_rows)

[identity profile] gds.livejournal.com 2013-04-03 10:08 am (UTC)(link)
currval -- старьё, как я понимаю. А вот nextval -- чтобы заранее получить нужное значение, бывает нужно.

(Anonymous) 2013-04-06 07:46 pm (UTC)(link)
Это разные вещи. curval вам даст счетчик. А ретурнинг то, что в строке стало. Триггер там или что еще. Я если честно с 1998 года голову ломал как это сделано в делфи без повторного селекта.