Как создать переменную, к которой можно получить глобальный доступ -oracle

В C ++ 14 вы можете использовать следующий шаблон для печати любого объекта, который имеет T :: print (std :: ostream & amp;) const; член.

template<class T>
auto operator<<(std::ostream& os, const T& t) -> decltype(t.print(os), os) 
{ 
    t.print(os); 
    return os; 
} 
2
задан Sree 17 January 2019 в 13:21
поделиться

2 ответа

В PL / SQL глобальная переменная может существовать только в пакете. Это потому, что PL / SQL инициализирует переменные уровня процедуры каждый раз, когда вызывается процедура. Только пакет позволяет нам определять переменную вне области действия процедуры.

Этот пакет игрушек будет сохранять значение n при нескольких вызовах на gvar_test.incr().

create or replace package gvar_test as
     procedure incr (p_in in number, p_out out number);
end gvar_test; 
/
create or replace package body gvar_test as
     n pls_integer;

     procedure incr (p_in in number, p_out out number) is
     begin
         n := n + p_in;
         p_out := n;
     end incr;
begin
    -- initialise variable first time package is called 
    n := 0;
end gvar_test; 
/

Глобальные переменные - сложная вещь. Многие люди считают их использование плохой практикой, в первую очередь потому, что очень легко потерять след из состояния. Это особенно верно, когда мы работаем с веб-приложениями, проходящими через пул соединений. Переменные PL / SQL хранятся в памяти сеанса, поэтому бесполезны для сохранения состояния между вызовами в среде, где каждый вызов может быть передан случайному сеансу. В этом случае вы должны использовать глобальные контексты приложения для хранения значения. Они доступны через сеансы базы данных (поэтому вам нужно быть осторожным с идентификаторами). Узнайте больше .

Кроме того, подумайте, являются ли переменные в памяти (будь то PL / SQL или прикладной контекст) безопасным подходом. Если вы отслеживаете какой-либо рабочий процесс или состояние процесса, обычно лучше сохранить его в таблице, хотя бы только для целей восстановления.

0
ответ дан APC 17 January 2019 в 13:21
поделиться

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

Реализация будет немного отличаться, если вы продолжите выполнение в рамках отдельной транзакции, в рамках сеанса или это общее число выполнений ...

0
ответ дан srasulic 17 January 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: