Как выполняется "select *" внутри хранимой процедуры? - PullRequest
1 голос
/ 11 февраля 2011

Если у вас есть хранимая процедура (Sybase), которая "выбирает * из ... где ...", как это работает? Когда * распространяется на все столбцы? Во время создания sproc, во время компиляции sproc, во время выполнения и т. Д.?

Я использую sproc, подобный тому, который не возвращает один из столбцов, и это заставляет меня думать, что это время создания sproc, но я не могу найти никаких ссылок, чтобы подтвердить это.

Редактировать : Я подтвердил, что перекомпиляция sproc не вызывает переоценки *, что в значительной степени подтверждает мои первоначальные мысли, но все еще ищет ссылку, где это поведение задокументировано.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

Это должно быть время выполнения. Вы можете проверить свою теорию, выполнив следующие действия:

  1. Создание фиктивной таблицы MY_DUMMY_TABLE с 1 полем (давайте просто назовем это "ID")

  2. Написать сохраненный процесс, который делает ничего, кроме выбора * из MY_DUMMY_TABLE

  3. Обратите внимание, что сохраненный процесс верни одно поле

  4. Измените таблицу, чтобы добавить другое поле (давайте назовем это «ЗАМЕЧАНИЯ»)

  5. Запустите сохраненный процесс снова

  6. Обратите внимание на то, включено ли примечание на выходе

0 голосов
/ 11 февраля 2011

* раскрывается при компиляции процедуры, что происходит при первом выполнении. После этого используется скомпилированная версия.

Избегайте использования select * в рабочем коде по таким причинам. См. этот связанный вопрос.

...