|
Теоретический вопрос о последовательности, в которой сервер выполняет инструкции
|
|||
---|---|---|---|
#18+
Добрый день. Вопрос может элементарный, но все же. При необходимости присвоить в подряд пару значений переменным где значение одной зависит от другой, писал две последовательных инструкции, типа вот такого: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Проще было бы сделать вот так, но по старой памяти я не был уверен, что не получится какая-нибудь неопределенность. Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Сейчас решил проверить как оно работает, во втором варианте все отрабатывает корректно. Но всегда ли оно будет правильно или может в любой момент сбойнуть? Или оптимизатор отлично разбирается в таких конструкциях и можно смело писать по второму варианту и даже и не думать? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 11:32 |
|
Теоретический вопрос о последовательности, в которой сервер выполняет инструкции
|
|||
---|---|---|---|
#18+
RuCosinus, Не гарантируется. Если хочется именно одной инструкцией, то можно так Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 11:56 |
|
Теоретический вопрос о последовательности, в которой сервер выполняет инструкции
|
|||
---|---|---|---|
#18+
RuCosinus, второй случай не является документированным. В какой-то из версий сервера он таким способом не работал. Кроме того, Для присваивания переменных рекомендуется использовать инструкцию SET @local_variable вместо SELECT @local_variable ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 11:59 |
|
Теоретический вопрос о последовательности, в которой сервер выполняет инструкции
|
|||
---|---|---|---|
#18+
invm, спасибо, значит я все правильно делал Владислав Колосов, да, спасибо. Я обычно пишу set, но если приходится править какие-либо старые процедуры в которых использует select, пишу так же для единообразия. А вы не знаете, чем обусловлено эта инструкция? В чем отличие и почему советуют использовать именно set? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 12:17 |
|
Теоретический вопрос о последовательности, в которой сервер выполняет инструкции
|
|||
---|---|---|---|
#18+
RuCosinus, когда-то я столкнулся с тем, что инструкция SELECT @var работала некорректно, но деталей не помню, к сожалению. Переменная была не простого типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 12:58 |
|
Теоретический вопрос о последовательности, в которой сервер выполняет инструкции
|
|||
---|---|---|---|
#18+
RuCosinus В чем отличие и почему советуют использовать именно set? https://stackoverflow.com/questions/3945361/set-versus-select-when-assigning-variables ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 13:54 |
|
Теоретический вопрос о последовательности, в которой сервер выполняет инструкции
|
|||
---|---|---|---|
#18+
komrad, Присваивание является одним из операторов и для него прописано слева направо. А вот запятая в select list в число операторов не включена. Отсюда неопределенность. Level Операторы 1 ~ (побитовое НЕ) 2 * (умножение), / (деление), % (остаток деления) 3 + (положительное), – (отрицательное), + (сложение), +( объединение), – (вычитание), & (побитовое И), ^ (побитовое исключающее ИЛИ), | (побитовое ИЛИ) 4 =, >, <, >=, <=, <>, !=, !>, !< (операторы сравнения) 5 NOT 6 AND 7 ALL, ANY, BETWEEN, IN, LIKE, OR, SOME 8 = (присваивание) Если два оператора в выражении имеют один и тот же уровень приоритета, они вычисляются в порядке слева направо по мере их появления в выражении. Например, если выражение использует инструкцию SET, то оператор вычитания будет выполнен до оператора сложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 13:59 |
|
Теоретический вопрос о последовательности, в которой сервер выполняет инструкции
|
|||
---|---|---|---|
#18+
Всем спасибо, с отличиями разобрался. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 15:28 |
|
|
start [/forum/topic.php?fid=46&msg=40085342&tid=1684479]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 119ms |
0 / 0 |