Может ли %NOTFOUND вернуть null после выборки?

Этот вопрос поднял очень интересный вопрос; кажется, что в документации Oracle есть противоречие относительно того, может ли %NOTFOUNDбыть нулевым после выборки. Это?

Цитата из документации 11g

Note: In Example 6-16, if FETCH never fetches a row, then c1%NOTFOUND is always NULL and the loop is never exited. To prevent infinite looping, use this EXIT statement instead: EXIT WHEN c1%NOTFOUND OR (c1%NOTFOUND IS NULL);

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

%NOTFOUND (the logical opposite of %FOUND) returns:
NULL after the explicit cursor is opened but before the first fetch
FALSE if the most recent fetch from the explicit cursor returned a row
TRUE otherwise

Документация 10g содержит аналогичное предупреждение, которое не обязательно является прямым противоречием, поскольку оно предупреждает, что выборка может не выполняться успешно, чтобы такое поведение проявлялось.

Before the first fetch, %NOTFOUND evaluates to NULL. If FETCH never executes successfully, the EXIT WHEN condition is never TRUE and the loop is never exited. To be safe, you might want to use the following EXIT statement instead:

EXIT WHEN c1%NOTFOUND OR c1%NOTFOUND IS NULL;

В каких ситуациях выборка может «сбой» или может %NOTFOUNDвозвращать значение null после выполнения выборки?

9
задан Community 23 May 2017 в 02:30
поделиться