powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Имена аргументов в хранимых функциях
7 сообщений из 7, страница 1 из 1
Имена аргументов в хранимых функциях
    #39966911
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день Уважаемые!

Я тут словил в своём приложении баг/не баг, а особенность которую для себя хочу прояснить с вашей помощью.
Значит я придерживаюсь правила, что переменные в программе указывающие на данные из БД - называются одинаково с полями на данные которых они указывают.

Имеется к примеру таблица:
Код: sql
1.
2.
3.
4.
5.
6.
TABLE AU_DataObjects(
    id         INT UNSIGNED NOT NULL KEY AUTO_INCREMENT PRIMARY KEY,
    AU_DataID  INT UNSIGNED NOT NULL, 
    isActive   TINYINT UNSIGNED NOT NULL DEFAULT 1,
    FK(AU_DataID) .....
)



И значит описываю функцию которая чистит данные по какому-то признаку:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE FUNCTION AU_clearData(AU_dataID INT) RETURNS TINYINT 
BEGIN
    DELETE FROM AU_DataObjects 
          WHERE AU_DataID=AU_DataID
            AND isActive=0;
    /* Пример SELECTа чисто для показа аналогии */
    SELECT  aa.id 
    FROM    AU_DataObjects aa 
    WHERE   aa.AU_DataID=AU_DataID
       AND  aa.isActive=0;
 
    RETURN 0;
END



И как вы наверное уже поняли, при выполнении функции удалялись просто все данные с isActive=0, независимо от аргумента. А так я написал, т.к. по незнанию решил что по аналогии с использованием аргументов в SELECT'е - значит БД сама догадывается что в правой части именно аргумент а не имя поля.

Но после выявления этого бага/фичи понял что наверное в SELECT'ах я всегда использую алиасы для таблиц и поэтому выражение aa.AU_DataID=AU_DataID однозначно расхуюживается где аргумент, а где поле, а в DELETE т.к. алиасов нет то и просто получается что поле=полю.

Итого собственно чего прошу-то, какие вообще стандарты или рекоммендации по именованию аргументов для хранимых функций/процедур? Пока для себя решил это добавлением аргументам _, т.е. _AU_DataID, но уж коли обжегся, то сразу хочу правильно сделать.

Спасибо!
...
Рейтинг: 0 / 0
Имена аргументов в хранимых функциях
    #39966916
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormot,

Код: sql
1.
2.
3.
 DELETE FROM AU_DataObjects 
          WHERE AU_DataID=AU_DataID
            AND isActive=0;



AU_DataID=AU_DataID всегда true, догадайся сам почему

Код: sql
1.
2.
3.
DELETE FROM AU_DataObjects 
          WHERE AU_DataObjects.AU_DataID=AU_DataID
            AND isActive=0;
...
Рейтинг: 0 / 0
Имена аргументов в хранимых функциях
    #39966923
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormot
я придерживаюсь правила, что переменные в программе указывающие на данные из БД - называются одинаково с полями на данные которых они указывают
Срочно меняй свои предпочтения.

Не, не в смысле изменять имена переменным. Наоборот. Уж если умеешь придерживаться правил, добавь ещё одно правило, причём с максимальным приоритетом. Правило такое:

Каждое имя поля всегда содержит в своём составе алиас таблицы, из которой оно берётся.
...
Рейтинг: 0 / 0
Имена аргументов в хранимых функциях
    #39966927
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Каждое имя поля всегда содержит в своём составе алиас таблицы, из которой оно берётся.
+100500
...
Рейтинг: 0 / 0
Имена аргументов в хранимых функциях
    #39966934
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Каждое имя поля всегда содержит в своём составе алиас таблицы, из которой оно берётся.
В смысле всегда указывать алиас таблицы (table.field) или прям в само имя поля втаскивать (table.table_field) ?
С первым соглашусь, второе спорно.
...
Рейтинг: 0 / 0
Имена аргументов в хранимых функциях
    #39966935
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina , я так и делаю всегда и уже довольно давно. Только так делал для SELECT'ов и UPDATE'ов, где алиасы таблицам прописать можно.
Про DELETE вот недокумекал, хотя на заре знакомства с БД использовал запись не алиаса а имятаблицы.поле, но когда открыл себе алиасы - то сразу перестал использовать имена таблиц т.к. они длинные. А сейчас вот вернусь с DELETE'ами к истокам так сказать :)

Спасибо, полезный пунктик мне отметили.
Вадя - тоже спасибо!
...
Рейтинг: 0 / 0
Имена аргументов в хранимых функциях
    #39966970
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft
В смысле всегда указывать алиас таблицы (table.field) или прям в само имя поля втаскивать (table.table_field) ?
Алиас - это отдельный кусок.
Да кому оно надо - префикс имени таблицы в самом имени поля? у полей префиксы используют для иных целей - указать тип данных, указать, что это FK, и т.п.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Имена аргументов в хранимых функциях
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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