Объясни как  "неопределённое поведение" может менять своё поведение в 
зависиости от чего-го там?

Как это неопределённое поведение?

Вот выдержка из 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");

вобще не срабатывает.

Ответить