Объясни как "неопределённое поведение" может менять своё поведение в
зависиости от чего-го там?
Как это неопределённое поведение?
Вот выдержка из LAngRef, стр. 169
Select procedure:
• Suspends execution of procedure until next FETCH is issued
• Returns output values
Executable procedure:
• Jumps to final END
• Not Recommended
Определения Select procedure и Executable procedure - это вобще
отдельная тема, поскольку Select procedure всегда является Executable
procedure:
Select procedures that an application can use in place of a table or
view in a SELECT
statement. A select procedure must be defined to return one or more
values, or an error
will result.
Executable procedures that an application can call directly, with the
EXECUTE PROCEDURE
statement. An executable procedure need not return values to the calling
program.
Фактически из этих определений ясно видно что Select procedure - это
такая, которую можно вызвать в команде SELECT. Но поскольку её же можно
вызвать и в команде EXECUTE PROCEDURE, то программист формально не может
определить будет ли выполнен Jumps to final END или не будет.
Я предлагаю в случае отсутствия выходных параметров запретить
использование SUSPEND, т.к. для этого предназначен EXIT.
Вот, к стати, интересная аналогия на C#:
void Button1Click(object sender, System.EventArgs e)
{
SuspendTest();
}
public IEnumerable SuspendTest()
{
MessageBox.Show("Start");
for (int i = 0; i < 5; i++)
yield return i;
}
При вызове Button1Click код
MessageBox.Show("Start");
вобще не срабатывает.