powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 7.04/9.02: Stored procedure - баг или фитча?
5 сообщений из 5, страница 1 из 1
ASA 7.04/9.02: Stored procedure - баг или фитча?
    #33726308
TIB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наткнулся на следующее:
Шаг 1. Создал таблицу testtab с полями p00,f00,f01 (все integer)
Шаг 2. Создал процедуру testproc. Внутри процедуры - единственная команда - "select * from testtab"
Шаг 3. Запустил ISQL, выполнил call testproc - все прекрасно
Шаг 4. Удалил в testtab колонку f01
Шаг 5. Снова запустил ISQL, выполнил call testproc - и тут получил ошибку "Column f01 not found" :)

Цитата из Help:
SELECT * finds all the columns currently in a table, so that changes in the structure of a table such as adding, removing, or renaming columns automatically modify the results of SELECT *.

Попытка перезагруза сервера между шагами 4 и 5 ситуацию не изменила...
Правда, если между шагами 4 и 5 просто пересохранить процедуру, то ошибка исчезает

P.S. Сам-то редко пользуюсь в процедурах конструкциями select *
...
Рейтинг: 0 / 0
ASA 7.04/9.02: Stored procedure - баг или фитча?
    #33726419
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скомпиленая процедура хранится внутри сервера в виде select p00,f00,f01 from testtab. Так что это фича.
...
Рейтинг: 0 / 0
ASA 7.04/9.02: Stored procedure - баг или фитча?
    #33726474
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процедуры и представления компилируются и в них сохраняются описания параметров и полей результирующего набора данных (в том числе в метаструктуре БД). Естественно после изменения структуры БД, другого используемого представления или процедуры никто автоматически перекомпилировать процедуры и представления не будет. Для того, чтобы не допускать подобных ошибок (а это именно ошибка проектировщика, а не баг или фича), необходимо соблюдать следующие простые правила:
1. Никогда не писать в представлениях и процедурах SELECT *, а всегда указывать список нужных полей.
2. Явно описывать в процедурах и представлениях возвращаемый результирующий набор через ключевое слово RESULT.
3. Ну и естественно стараться перед проектированием БД собрать как можно полное ТЗ и сразу описать все поля, стремясь к ситуации, что поля могут добавляться, но желательно никогда удаляться.

Если же и случается такая ситуация, то в принципе написать для ISQL шаблон, который с системных таблиц получит список представления, выполнил на них "ALTER VIEW ViewName RECOMPILE" и список ХП, на который выполнит "ALTER PROCEDURE".

P.S. Странно, что не пользуетесь в ХП SELECT-ами. В отличие от представлений ХП получаются выгоднее и удобнее тем, что с их помощью можно сэмулировать параметризированные представления, в которых гораздо удобнее написать и вернуть сразу с параметрами запрос, где данных ХП в 9.0.2 могут сами использоваться в SELECT-ах.
--
www.rusug.ru - портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
ASA 7.04/9.02: Stored procedure - баг или фитча?
    #33726732
TIB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To ACRUS:
:) Я не говорил, что не пользуюсь select'ами в ХП (более того, на клиенте для получения Result Set предпочитаю выполнить call PROC нежели Select) - я сказал, что не пользуюсь конструкцией 'select * ' в ХП (как раз пункт 1 в Вашем ответе)

:) P.S. Это просто был просто эксперимент - попытка выдать на клиента из процедуры результирующий набор данный с заранее неизвестным количеством столбцов - реално я, разумеется не проектировал БД под такие запросы
...
Рейтинг: 0 / 0
ASA 7.04/9.02: Stored procedure - баг или фитча?
    #33727545
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда сорри, просто не правильно понял :)
--
www.rusug.ru - портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 7.04/9.02: Stored procedure - баг или фитча?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]