2013-10-11 3 views
0

Возможно ли создать пользовательскую функцию в mysql, например SUM, MAX и т. Д., Которая принимает несколько столбцов и выполняет некоторую операцию в каждой строке?Функция mysql, которая работает с несколькими столбцами

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

Кто-то предложил использовать динамический sql, но я не могу получить курсор. Поэтому моя единственная надежда заключается в использовании настраиваемой функции.

10 раз заблаговременно.

P.S.

Чтобы сделать вопрос более ясным здесь то, что я хочу сделать:

Я хочу, чтобы вычислить расстояние маршрута, где каждая строка в таблице базы данных представляет собой координаты (широта и долгота). К сожалению, данные, которые у меня есть, действительно большие, и если я запрашиваю данные и выполняю вычисления с использованием java, для передачи данных на веб-сервер требуется более половины минуты, поэтому я хочу выполнить вычисления на машине sql.

+0

Есть ли причина, по которой вы не можете обработать данные после их получения? – Populus

+0

_ "как SUM, MAX и т. Д." _ - что именно есть "и так далее"? Для SUM было бы легко просто добавить SUM за столбец и добавить эти суммы вместе, и максимум нескольких значений MAX можно было бы определить с помощью GREATEST() ... и что курсор должен сделать с этим и как это проблема довольно непонятно мне. – CBroe

+0

Похоже, вы можете [создать сохраненную функцию] (http://dev.mysql.com/doc/en/create-function.html), но без дальнейших подробностей невозможно быть уверенным ... – eggyal

ответ

0

Выберите something1, something2 из table_name, где имя таблицы является переменной

несколько одинаково структурированных таблиц (необходимое условие для такого рода запросов) противоречит Principle of Orthogonal Design.

Не делайте этого. По крайней мере, не без очень Хорошая причина — с подходящими индексами (десятки) миллионов записей в таблице достаточно проста для того, чтобы MySQL обрабатывал без необходимости разбиения; и даже если один делает, необходимо разбить данные, есть better ways, чем это руководство kludge (что может привести к неоднозначным, потенциально несогласованным данным и привести к избыточности и сложности в коде данных).

+0

Я не знаю, понимаете ли вы меня, но я не хочу ждать 30 секунд, чтобы выбрать все данные, а затем вычислить его, чтобы получить одно двойное значение! –

+0

@ ДжороСекса: Да, я тебя понимаю. Думаю, ты меня не понимаешь. Я говорю вам, что ваша текущая схема - это плохая идея *, и вы должны вместо этого инвестировать в удобную * индексацию * ваших данных и/или * изначально * разбивая свои таблицы по мере необходимости. Поскольку ваш вопрос не содержит каких-либо особенностей, на которых можно дать конкретное указание, вам придется самостоятельно исследовать эти идеи и вернуться, если у вас есть вопросы о том, как их реализовать. – eggyal

+0

Пожалуйста, не говорите мне некоторые теоретические идеи. Независимо от того, что вы делаете или оптимизируете проблему, так это то, что при запросе больших данных по сети все происходит очень медленно, поэтому единственное решение - делать вычисления на сервере sql и получать только нужный результат. –

Смежные вопросы