В большинстве систем Linux /dev/random
работает на основе реальной энтропии, собранной средой. Если ваша система не доставляет большой объем данных из /dev/random
, это, вероятно, означает, что вы не генерируете достаточно случайную окружающую среду, чтобы привести ее в действие.
Я не уверен, почему вы думаете /dev/urandom
«медленнее» или более высокого качества. Он повторно использует внутренний пул энтропии для генерации псевдослучайности - что делает его немного более низким качеством - но он не блокирует. Как правило, приложения, которые не требуют высокоуровневой или долгосрочной криптографии, могут надежно использовать /dev/urandom
.
Попробуйте немного подождать, а затем снова читать из /dev/urandom
. Вполне возможно, что вы исчерпали так много внутреннего чтения пулов энтропии из /dev/random
, сломав оба генератора - чтобы ваша система могла создавать больше энтропии, их нужно пополнить.
См. Википедию для получения дополнительной информации о /dev/random
и /dev/urandom
.
Вы можете использовать RETURN
MWATSON@> set serveroutput on
MWATSON@> !cat test.sql
BEGIN
IF 1 = 1 THEN
DBMS_OUTPUT.PUT_LINE('ABOUT TO EXIT');
RETURN;
END IF;
DBMS_OUTPUT.PUT_LINE('DID NOT EXIT');
END;
MWATSON@> @test
8 /
ABOUT TO EXIT
PL/SQL procedure successfully completed.
MWATSON@>
Если вы вызываете исключение, которое блок не обрабатывает, исключение всегда передается вызывающему. Итак, самый простой способ остановить обработку - вызвать исключение, которое не обрабатывается нигде в стеке вызовов.
например,
DECLARE
e_halt_processing EXCEPTION;
BEGIN
IF [condition] THEN
RAISE e_halt_processing;
END IF;
[the rest of the program]
END;
Я не знаю PL / SQL, но почему бы вам не попробовать (используя свои слова):
BEGIN
IF [!condition]
[the rest of the program]
END IF
END
Просто думаю