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

Создаю таблицу, в которой у меня должно быть 3 вычисляемых столбца. Два первых вычисляемых столбца используют стандартные встроенные функции Buffer() и AsText(), а для третьего столбца прописал свою пользовательскую функцию KoordsAreaInTxt(). И вот с 3-м вычисляемым столбцом и возникает проблема при создании таблицы, пишет, что данный столбец содержит запрещённую функцию - "Error Code: 3102. Expression of generated column 'AllKoordinatesAreaTxt' contains a disallowed function."

Почему он ругается? Что нужно исправить?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE TABLE GeographicalKoordinates (
  Id_GeographicalKoordinates int(11) NOT NULL AUTO_INCREMENT,
  Koordinate geometry NOT NULL,
  TypeKoordinates VARCHAR(50) CHECK (TypeKoordinates IN ('POINT', 'LINESTRING','POLYGON','Other', null)),
  SRID_ INT default null,
  RadiusAction double default NULL,
  AllKoordinatesArea text GENERATED ALWAYS AS (Buffer(Koordinate,RadiusAction)),
  HeighSeaLevel DOUBLE default NULL,
  KoordinateTxt text GENERATED ALWAYS AS (AsText(Koordinate)),
  AllKoordinatesAreaTxt text GENERATED ALWAYS AS (KoordsAreaInTxt(Koordinate,RadiusAction)),
  Description TEXT, 
  PRIMARY KEY (`Id_GeographicalKoordinates`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `KoordsAreaInTxt`(Koordinate geometry, RadiusAction double) RETURNS text CHARSET utf8
BEGIN
declare area geometry default null;
declare areaTxt TEXT;
set area=Buffer(Koordinate,RadiusAction);
set areaTxt=AsText(area);
RETURN areaTxt;
END$$
DELIMITER ;
...
Рейтинг: 0 / 0
Создание вычисляемых столбцов в таблице
    #39766469
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользовательские функции недопустимы.
...
Рейтинг: 0 / 0
Создание вычисляемых столбцов в таблице
    #39766471
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
AllKoordinatesAreaTxt text GENERATED ALWAYS AS (AsText(Buffer(Koordinate,RadiusAction))),
...
Рейтинг: 0 / 0
Создание вычисляемых столбцов в таблице
    #39766485
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо!
...
Рейтинг: 0 / 0
Создание вычисляемых столбцов в таблице
    #39766508
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
AkinaПользовательские функции недопустимы.

А если мне всё-таки понадобиться сделать расчёт, для которого в MySql нет стандартной функции? Как тогда быть?
...
Рейтинг: 0 / 0
Создание вычисляемых столбцов в таблице
    #39766584
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mirА если мне всё-таки понадобиться сделать расчёт, для которого в MySql нет стандартной функции? Как тогда быть?CREATE VIEW. Или переопределённые данные и триггер.
...
Рейтинг: 0 / 0
Создание вычисляемых столбцов в таблице
    #39766693
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
авторCREATE VIEW
В представлении можно использовать пользовательские функции?

авторИли переопределённые данные и триггер.

Что значит переопределённые данные?
...
Рейтинг: 0 / 0
Создание вычисляемых столбцов в таблице
    #39766761
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mirВ представлении можно использовать пользовательские функции?Запросто. Проблема удаления или изменения функции - за свой счёт.

Vlad__i__mirЧто значит переопределённые данные?Данные, значение которых может быть однозначно вычислено на основании других данных. Потенциальная точка проблемы (рассогласования) - формально некорректные изменения могут привести к тому, что в поле переопределённых данных хранится значение, не равное такому вычисленному (скажем, при прямой корректировке такого значения, или при блокировании выполнения триггеров, которые поддерживают обновление такого значения при обновлении других данных).
...
Рейтинг: 0 / 0
Создание вычисляемых столбцов в таблице
    #39767823
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
AkinaПроблема удаления или изменения функции - за свой счёт.

Что это значит? Для того чтобы удалить функцию нужно будет удалить представление её использующее? Нельзя будет просто изменить функцию?

AkinaДанные, значение которых может быть однозначно вычислено на основании других данных.

Это данные, которые возвратит триггер? Или что-то ещё? Я что-то подзапутался в вашем примере.
...
Рейтинг: 0 / 0
Создание вычисляемых столбцов в таблице
    #39767824
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mirЧто это значит? Для того чтобы удалить функцию нужно будет удалить представление её использующее?Наоборот. Изменение или удаление функции сделает вьюв либо сбойным, либо возвращающим чёрт-те что... Где это аукнется, когда обнаружится, и сколько причинит убытку - можно только догадываться.
Vlad__i__mirЭто данные, которые возвратит триггер?Какой триггер? Ну думать же надо, что читаешь... ладно, вот пример.
Есть таблица, в ней хранятся наименование предмета, вес одного предметов и количество предметов. В любой момент можно посчитать вес всех имеющихся предметов. Допустим, умножение у нас - очень долгая операция, а общий вес нужен часто. Как ускорить? Да просто в таблицу добавить поле общего веса и заполнить таким вычисленным значением. И брать готовое значение, не тратясь на вычисление каждый раз. Вот эти самые данные в этом добавленном поле и будут переопределёнными - потому чо могут быит посчитаны на основании значений других полей.
...
Рейтинг: 0 / 0
Создание вычисляемых столбцов в таблице
    #39768056
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо! Теперь я понял.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание вычисляемых столбцов в таблице
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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