Страница 1 из 1

системные переменные в FB2

Добавлено: 13 ноя 2006, 16:28
sydenis
читаю release notes, но у меня с туземными языками не очень как-то...
правильно ли я понял, что оперируя RDB$GET_CONTEXT или RDB$SET_CONTEXT можно теперь задавать свои собственные переменные?
А какое у них время жизни будет?

Добавлено: 24 ноя 2006, 13:07
dimitr
правильно. Соответствующее их контексту (коннект или тр-ция).

Добавлено: 27 ноя 2006, 16:09
sydenis
А где бы об это подробнее узнать, в т.ч. про область видимости.
Если, скажем, есть потребность, чтобы все объекты базы знали не только 'NOW' или 'USER', но что-нибудь моё, типа
INITIAL_DATE = 01.01.2006
DEFAULT_USER = 'VANIA' и т.п.
Для этого RDB$SET_CONTEXT подходит? Где бы об этом почитать?

Добавлено: 27 ноя 2006, 16:29
WildSery
sydenis писал(а):чтобы все объекты базы знали

Код: Выделить всё

CREATE TABLE MyGlobalParamsTable (
  ID INT,
  ATYPE INT,
  NAME VARCHAR(100)
  VALUE VARCHAR(1000));

select ATYPE, VALUE from MyGlobalParamsTable where NAME = 'DEFAULT_USER';

Добавлено: 27 ноя 2006, 17:22
sydenis
спасибо - в курсе
вопрос был о новой функциональности fb2

Добавлено: 27 ноя 2006, 18:00
WildSery
sydenis писал(а):вопрос был о новой функциональности fb2
Дык про то и речь.
Не было такой проблемы, как глобальные для базы переменные.
А вот переменные контекста транзакции и сессии разруливать было геморно очень, так что эти новшества как раз в тему.

Добавлено: 27 ноя 2006, 21:46
sydenis
Не было такой проблемы
угу... ну в таком разрезе понятно
тогда нафиг там возможность ещё какие-то свои переменные определять?

Добавлено: 27 ноя 2006, 22:22
dimitr
sydenis писал(а):Где бы об этом почитать?
в релизных нотах, есс-но

Добавлено: 28 ноя 2006, 11:02
sydenis
хм... напомню с чего всё начиналось
читаю release notes...
допускаю, что чел со статусом"разработчик" видит за скупыми строчками гораздо больше, чем простой юзер :)) тогда просто объясните смысл нововведения:
У нас и до этого имелись системные переменные, которые подробно определяли контекст, сейчас их даже ещё прибавилось.
Из предыдущих объяснений я понял, что теперь появилась возможность определить собственную переменную на время одного коннекта/транзакции и видимую только внутри него? Мне не понятно для чего это можно использовать - может быть я упускаю, что-то действительно полезное в своей работе

Добавлено: 28 ноя 2006, 11:33
WildSery
sydenis писал(а):Мне не понятно для чего это можно использовать - может быть я упускаю, что-то действительно полезное в своей работе
Не знаешь, зачем применить - значит, не нужно, не используй :wink:
Если мне нужна переменная, видимая не только пока я внутри одной процедуры, я использую RDB$SET/GET_CONTEXT, и я уверен, что её значение не пересечётся с параллельно установленной из той же процедуры другим пользователем / сессией.

Добавлено: 28 ноя 2006, 12:04
sydenis
теоретически понятно, а практически... :|
ни разу сталкивался с тем, чтобы переменные, объявленные внутри одной процедуры, как-то конфликтовали в разных коннектах..

можно какой-нть простой пример из жизни библиотекарей, отделов кадров или манагеров с заказами?

Добавлено: 28 ноя 2006, 12:26
WildSery
sydenis писал(а):тни разу сталкивался с тем, чтобы переменные, объявленные внутри одной процедуры, как-то конфликтовали в разных коннектах..
Не внутри процедуры! Я только сослался на присвоение значения внутри процедуры, как пример.
Переменные видимы для всей транзакции или сессии. Этих процедур можно запускать много, и в каждой будет видно текущее значение этой переменной.

Добавлено: 28 ноя 2006, 12:54
sydenis
да, я это понял, просто не пойму практического смысла.
Скажем одна процедура что-то сделала и с помощью RDB$SET_CONTEXT поставила флаг, типа "я тут табличку заупдатила, просьба никому её по второму разу не трогать" :)
Это понятно, когда всем этот флаг виден. Но если о нём знает только узкий круг лиц из одного коннекта - это вроде бессмысленно. Тем более, что в рамках одной транзакции ты чаще всего и так знаешь где чего делается и флаги вроде особо не нужны

Добавлено: 28 ноя 2006, 13:24
WildSery
Я уже говорил - если не можешь (пока?) придумать применение - не пользуйся.
Например, мне нравится Execute statement, очень мощная штука и может решить казалось бы безвыходную проблему, но в моём достаточно большом проекте я её ни разу не использовал. Потому что не требовалось. Зато если потребуется - вот она! 8)

Добавлено: 28 ноя 2006, 14:21
sydenis
Я уже говорил - если не можешь (пока?) придумать применение - не пользуйся.
эдак никто и IB/FB пользоваться бы не стал - нужно чтоб вначале кто-то рассказал как тебе от него сильно хорошо будет, однако :lol: