Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 23 24 25 26 27 28 [29] 30 31 32   вперед  Ctrl
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
Arioch,

гляну вечером, если не забуду и время будет. Про ALTER TABLE в тот день времени не было, а потом забыл, каюсь.
14 авг 18, 16:44    [21642154]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Arioch
Member

Откуда:
Сообщений: 11101
Симонов Денис,

да, кстати, желательно явно описать, два "граничных случая" - я вот на SO напоролся на один из них.

1) что происходит с переменной, после недавшегося FETCH (после окончания курсора). Насколько понимаю, она просто не меняется. Но можно предполагать установку в NULL (помнишь споры вокруг "x := (select...)" и "select ... into x" ?). Желатально явно описать.
2) что произойдет на втором и последующих вызовах "после конца курсора". На первом имеем ROW_COUNT=0, и я думал, что на втором и последующем будет то же. А вот Марк говорит, на втором вызове уже будет ошибка.

В принципе та ссылка на Stack Overflow - там довольно интересный пример, в котором явно есть задача (странная, да) где именованный курсор лучше подходит, чем FOR SELECT

IMHO этот пример бы в документацию скопировать - он и "тонкие места" обходит и имеет какой-то реальный смысл. Текущие примеры укладываются в "идиотский громоздким способ написать FOR SELECT в 10 строк"
14 авг 18, 17:16    [21642204]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
Arioch

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


Звучит разумно и просто, надёжность через примитивность, надеюсь это проверено?
Потому что англо-документация тут просто пестня...
https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-psql-coding.html#fblangref25-psql-fetch

For checking whether all of the the data set rows have been fetched, the context variable ROW_COUNT returns the number of rows fetched by the statement. It is positive until all rows have been checked. A ROW_COUNT of 1 indicates that the next fetch will be the last.



в английской версии чепуха написана. Эта переменная довольно хитрая
https://www.firebirdsql.org/refdocs/langrefupd21-row_count.html
14 авг 18, 20:59    [21642389]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Arioch
Member

Откуда:
Сообщений: 11101
Симонов Денис,

> Added in: 1.5

ух ты...

а как же в Interbase контролировали рещультат Fetch без этой переменной, интересно?...

Что-то в доках недоговаривается...
15 авг 18, 11:30    [21642729]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
Arioch,

а ему незачем было. Явные курсоры появились только в 2.0. В остальных случаях всегда можно найти workaround
15 авг 18, 11:50    [21642769]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61462
Симонов Денис> в английской версии чепуха написана.

Это при переводе напортачили?

P.S. Про "1 если предпоследняя"
не припомню (ИМХО, чепуха),
но в циклах её обычно на ноль
проверяют, так что неактуально.

Posted via ActualForum NNTP Server 1.5

15 авг 18, 14:31    [21643146]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
Гаджимурадов Рустам,

именно эта. Про 1 относительно верно только только для FOR SELECT циклов, но никак не про FETCH
Вот же более подробно рассказано об это переменной https://www.firebirdsql.org/refdocs/langrefupd21-row_count.html

ИХМО кроме проверки на ноль от неё большого смысла нет. По крайней мере на остальные результаты я бы не стал рассчитывать.
15 авг 18, 14:53    [21643209]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Arioch
Member

Откуда:
Сообщений: 11101
ну тогда про Fetch надо подробнее написать про узкие места и пример в SO подцепить
15 авг 18, 15:34    [21643295]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Arioch
Member

Откуда:
Сообщений: 11101
kdv
Arioch
Забавно, что нет той самой титульной страницы, которую меня призывали смотреть.

21633246 я тоже удивлен, это вопрос к Денису, что-то, видать, не так генерится.


Arioch
21635792 тогда можно наконец править текст ,пока не забыли

Arioch
IMHO второй заголовок "ALTER TABLE" надо удалить ,он там никакой пользы кроме вреда не приносит


Arioch
ну тогда про Fetch надо подробнее написать про узкие места и пример в SO подцепить


альзо

iBase docs
В СУБД Firebird для работы с данными, содержащими дату и время, используются типы данных DATE, TIME, TIMESTAMP.
......
В типах DATETIME и TIME Firebird хранит секунды....



альзо про DateAdd - надо добавить про обрезку дат ( особые случаи, corner cases нужно явно проговаривать вслух )

например
SELECT DateAdd ( -1 MONTH TO DATE '31-MAR-1980' ) From MON$DATABASE
30 авг 18, 13:58    [21658853]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Arioch
Member

Откуда:
Сообщений: 11101
и кстати, про "Хранимые функции" в 2.5 (точнее в 2.1, на 2.5 пока не проверял)

SELECT
output_column AS expr_col,
col2,
FROM T
LEFT JOIN PSQL_PROC(T.col1) ON 1=1


а вот неявный join не работает, пытается NULL в процедуру сунуть вместо параметров, даже если параметры SP прописанны как NOT NULL

это вообще откуда-то вытекает из стандарта такое, что обязательно надо еще NULL попробовать?
а если N параметров, то неявный или INNER JOIN будут 2^N сочетание NULL/не-NULL пытаться перебрать?

или просто такой баг в движке ?

в любом случае, мне кажется надо в документацию добавить комментарий, почему именно LEFT JOIN, почему другие джойны не сработают
30 авг 18, 14:08    [21658878]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Arioch
Member

Откуда:
Сообщений: 11101
Чтобы помнили, даже если не правили...

О мониторинговых таблицах - 21706423
17 окт 18, 13:06    [21706444]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Dmitry Kurbsky
Member

Откуда:
Сообщений: 161
В таблице B.1 у кодов SQLSTATE обрезаны нули слева.
10 июн 19, 18:53    [21906149]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28883
Надо бы расширить описание mon$transactions.mon$state, а то люди путаются.
Там написано
Состояние транзакции:• 0 — бездействующая;• 1 — активная.

Но под "активная" тут имеется в виду наличие активных запросов в mon$statements для этой транзакции.
А у людей в голове - раз "активная", то просто активная, хотя в mon$ неактивных (завершенных) транзакций быть не может, они там все активные по определению.
Предварительно этот вопрос надо у Еманова уточнить - каким mon$statements.mon$state соответствует 0 и 1 в mon$transactions.mon$state.
30 окт 19, 11:48    [22005853]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
kdv,

там не всё так просто mon$statements.mon$state аж 3 состояния

автор
0 — бездействующий (idle);
1 — выполняемый (active);
2 — приостановленный (stalled)

Состояние оператора STALLED — это состояние "приостановлено". Возможно для запроса,
который начал своё выполнение, ещё не завершил его, но в данный момент не выполняется.
Например, ждёт входных параметров или очередного фетча (fetch) от клиента.


Если я правильно понял, то mon$statements.mon$state=0 уже не содержит идентификатора транзакции. Такие запросы либо уже выполнены, либо просто подготовлены и ещё не выполнялись.

Так вот мои исследования показывают что mon$transactions.mon$state=0 может быть только если в транзакции не вообще не выполнялся ни один оператор. Даже полностью отфетченный курсор с mon$statements.mon$state=0 не меняет состояние транзакции с
mon$transactions.mon$state=1 на 0

Получается mon$transactions.mon$state = 0 может быть только для транзакций в которых вообще ничего не делалось. Если в транзакции выполнялся хотя бы один оператор, то mon$transactions.mon$state = 1. И от mon$statements.mon$state оно ни как не зависит. Но надо бы ещё уточнить
30 окт 19, 21:39    [22006580]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
kdv,

добавил разъяснения во всех версиях

https://github.com/sim1984/langref25
https://github.com/sim1984/langref30
https://github.com/sim1984/langref40
4 ноя 19, 21:35    [22009541]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
hvlad
Member

Откуда:
Сообщений: 10957
Симонов Денис
Получается mon$transactions.mon$state = 0 может быть только для транзакций в которых вообще ничего не делалось
Это не так.

mon$transactions.mon$state = 1 означает наличие связанных с тр-цией запросов.
Запрос связывается с тр-цией, когда начинает выполнение.
Эта связь разрывается (внимание !) когда запрос начинает новое выполнение, или когда тр-ция\запрос удаляется.
Но не тогда, когда запрос выполнен\сфетчен.

Думаю, тут можно обратиться к трекеру, с просьбой учитывать не только наличие связанных запросов, но ещё и их состояние.
Кстати, в mon$statements состояние активности запроса учитывается.
4 ноя 19, 22:54    [22009575]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
hvlad
Эта связь разрывается (внимание !) когда запрос начинает новое выполнение, или когда тр-ция\запрос удаляется.
Но не тогда, когда запрос выполнен\сфетчен.


Опыты показывали подтверждение, что в этом случае mon$statements.mon$transaction_id = null, но не mon$transactions.mon$state = 0.

По крайней мере я видел когда mon$transactions.mon$state = 1 и для всех запросов mon$statements.mon$transaction_id = null.
Может конечно это Expert мудрит, например не удаляет запрос до следующего выполнения или коммита.
4 ноя 19, 23:11    [22009586]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
hvlad,

написал почти твоими словами. Но всё же хотелось бы узнать почему mon$statements.mon$transaction_id обнуляется быстрее, чем mon$transactions.mon$state устанавливается в 0.
5 ноя 19, 22:39    [22010274]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
hvlad
Member

Откуда:
Сообщений: 10957
Симонов Денис
Но всё же хотелось бы узнать почему mon$statements.mon$transaction_id обнуляется быстрее, чем mon$transactions.mon$state устанавливается в 0.
Потому, что
hvlad
в mon$statements состояние активности запроса учитывается
:)

Симонов Денис
Может конечно это Expert мудрит, например не удаляет запрос до следующего выполнения или коммита.
Не удивлюсь. И - это легко проверить.
5 ноя 19, 22:48    [22010277]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50374

Денис, можешь из таблички с описанием типов для CHAR убрать слова "при отображении"? А то
"разные люди бывают на свете"...

Posted via ActualForum NNTP Server 1.5

14 ноя 19, 23:16    [22016657]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
Dimitry Sibiryakov,

хах прочитал переписку. Это же сколько они выводов то понаделали из-за одного слова.
Это слово уберу, но только в русских версиях.
15 ноя 19, 09:38    [22016780]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31199

по результатам сегодняшнего флуда в дельфийском форуме:
https://www.sql.ru/forum/actualthread.aspx?tid=1319034

надо бы при описании литералов 'NOW', 'TODAY' и т.п.,
везде где можно указать, что сокращённое приведение типов
(timestamp'NOW', date'TODAY' и т.п.) выполняется единожды,
на момент препарирования запроса, или компиляции (вьюхи, SP, триггера)
и в дальнейшем хрен меняется, в отличие от правоверного
CAST('NOW' as timestamp), CAST('TODAY' as date) и т.п.

а то приходят деревенские и начинают брюкву сеять...

Posted via ActualForum NNTP Server 1.5

15 ноя 19, 13:36    [22017137]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50374

Мимопроходящий
сокращённое приведение типов

Это не приведение. Это литерал.

Posted via ActualForum NNTP Server 1.5

15 ноя 19, 13:41    [22017141]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31199

15.11.2019 13:41, Dimitry Sibiryakov пишет:
> Это не приведение. Это литерал.

литерал это 'NOW'

Posted via ActualForum NNTP Server 1.5

15 ноя 19, 13:44    [22017145]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 2.5  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50374

Мимопроходящий
литерал это 'NOW'

В апострофах - строковый литерал. С префиксом date - литерал даты. С префиксом timestamp -
литерал даты-времени.

date MY_FIELD - не работает (я надеюсь).

Posted via ActualForum NNTP Server 1.5

15 ноя 19, 13:47    [22017149]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 23 24 25 26 27 28 [29] 30 31 32   вперед  Ctrl
Все форумы / Firebird, InterBase Ответить