При первом вызове подпрограммы модуля или любом обращении к переменной или типу модуля создается его экземпляр (instantiated). Это значит, что модуль считывается с диска в память, а затем запускается скомпилированный код вызванной подпрограммы. В этот момент для всех переменных, описанных в модуле, выделяется память. У каждого сеанса будет собственная копия модульных переменных; это гарантирует, что два сеанса, выполняющие подпрограммы одного и того же модуля, будут использовать различные области памяти.
Во многих случаях при создании экземпляра модуля требуется запускать код инициализации. Для этого к телу модуля нужно добавить раздел инициализации, разместив его после всех объектов:
CREATE OR REPLACE PACKAGE BODY имя_модуля[1?> | AS}
BEGIN
код_инициализации; END |имя_модуля];
где имя_модуля — это имя модуля, а код_инии,иалшац.ии — запускаемый код. Ниже приведен пример модуля, реализующего функцию генерации случайных чисел.
Для получения случайного числа можно просто вызвать Random. Rand. Последовательность случайных чисел зависит от исходного значения: для одного и того же исходного значения генерируются одинаковые последовательности. Поэтому, чтобы получить иные значения, необходимо переустанавливать исходное значение всякий раз при создании экземпляра модуля. Для этого в разделе инициализации модуля вызывается процедура ChangeSeed.
Внимание
■ В Oracle8 имеется встроенный модуль DBMS_RANDOM, который также применяется для получения случайных чисел (см. приложение А).
< Предыдущая | Следующая > |
---|