системные переменные в FB2
Модераторы: kdv, Alexey Kovyazin
системные переменные в FB2
читаю release notes, но у меня с туземными языками не очень как-то...
правильно ли я понял, что оперируя RDB$GET_CONTEXT или RDB$SET_CONTEXT можно теперь задавать свои собственные переменные?
А какое у них время жизни будет?
правильно ли я понял, что оперируя RDB$GET_CONTEXT или RDB$SET_CONTEXT можно теперь задавать свои собственные переменные?
А какое у них время жизни будет?
sydenis писал(а):чтобы все объекты базы знали
Код: Выделить всё
CREATE TABLE MyGlobalParamsTable (
ID INT,
ATYPE INT,
NAME VARCHAR(100)
VALUE VARCHAR(1000));
select ATYPE, VALUE from MyGlobalParamsTable where NAME = 'DEFAULT_USER';
хм... напомню с чего всё начиналось
У нас и до этого имелись системные переменные, которые подробно определяли контекст, сейчас их даже ещё прибавилось.
Из предыдущих объяснений я понял, что теперь появилась возможность определить собственную переменную на время одного коннекта/транзакции и видимую только внутри него? Мне не понятно для чего это можно использовать - может быть я упускаю, что-то действительно полезное в своей работе
допускаю, что чел со статусом"разработчик" видит за скупыми строчками гораздо больше, чем простой юзер :)) тогда просто объясните смысл нововведения:читаю release notes...
У нас и до этого имелись системные переменные, которые подробно определяли контекст, сейчас их даже ещё прибавилось.
Из предыдущих объяснений я понял, что теперь появилась возможность определить собственную переменную на время одного коннекта/транзакции и видимую только внутри него? Мне не понятно для чего это можно использовать - может быть я упускаю, что-то действительно полезное в своей работе
Не знаешь, зачем применить - значит, не нужно, не используйsydenis писал(а):Мне не понятно для чего это можно использовать - может быть я упускаю, что-то действительно полезное в своей работе
Если мне нужна переменная, видимая не только пока я внутри одной процедуры, я использую RDB$SET/GET_CONTEXT, и я уверен, что её значение не пересечётся с параллельно установленной из той же процедуры другим пользователем / сессией.
Не внутри процедуры! Я только сослался на присвоение значения внутри процедуры, как пример.sydenis писал(а):тни разу сталкивался с тем, чтобы переменные, объявленные внутри одной процедуры, как-то конфликтовали в разных коннектах..
Переменные видимы для всей транзакции или сессии. Этих процедур можно запускать много, и в каждой будет видно текущее значение этой переменной.
да, я это понял, просто не пойму практического смысла.
Скажем одна процедура что-то сделала и с помощью RDB$SET_CONTEXT поставила флаг, типа "я тут табличку заупдатила, просьба никому её по второму разу не трогать"
Это понятно, когда всем этот флаг виден. Но если о нём знает только узкий круг лиц из одного коннекта - это вроде бессмысленно. Тем более, что в рамках одной транзакции ты чаще всего и так знаешь где чего делается и флаги вроде особо не нужны
Скажем одна процедура что-то сделала и с помощью RDB$SET_CONTEXT поставила флаг, типа "я тут табличку заупдатила, просьба никому её по второму разу не трогать"
Это понятно, когда всем этот флаг виден. Но если о нём знает только узкий круг лиц из одного коннекта - это вроде бессмысленно. Тем более, что в рамках одной транзакции ты чаще всего и так знаешь где чего делается и флаги вроде особо не нужны
Я уже говорил - если не можешь (пока?) придумать применение - не пользуйся.
Например, мне нравится Execute statement, очень мощная штука и может решить казалось бы безвыходную проблему, но в моём достаточно большом проекте я её ни разу не использовал. Потому что не требовалось. Зато если потребуется - вот она!
Например, мне нравится Execute statement, очень мощная штука и может решить казалось бы безвыходную проблему, но в моём достаточно большом проекте я её ни разу не использовал. Потому что не требовалось. Зато если потребуется - вот она!