Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание вычисляемых столбцов в таблице / 11 сообщений из 11, страница 1 из 1
29.01.2019, 12:04
    #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
29.01.2019, 12:58
    #39766469
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание вычисляемых столбцов в таблице
Пользовательские функции недопустимы.
...
Рейтинг: 0 / 0
29.01.2019, 13:00
    #39766471
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание вычисляемых столбцов в таблице
Код: sql
1.
AllKoordinatesAreaTxt text GENERATED ALWAYS AS (AsText(Buffer(Koordinate,RadiusAction))),
...
Рейтинг: 0 / 0
29.01.2019, 13:10
    #39766485
Vlad__i__mir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание вычисляемых столбцов в таблице
Akina, спасибо!
...
Рейтинг: 0 / 0
29.01.2019, 13:29
    #39766508
Vlad__i__mir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание вычисляемых столбцов в таблице
Akina,
AkinaПользовательские функции недопустимы.

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

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

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

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

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

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

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


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