powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / хочу красивое решение
24 сообщений из 24, страница 1 из 1
хочу красивое решение
    #38333452
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть хранимка
у неё входной параметр техт - 1,2;2,2;.............
т.е. пара цифр (int) разделенные запятой,эти пары разделены ;
таких пар от 1 до хз
задача вставить их таблицу

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE table1 (
  id INT NOT NULL AUTO_INCREMENT,
  value1 INT DEFAULT NULL,
  value2 INT DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB;



пару решения я знаю, но не нравятся они мне.
надо что-то по-красивее, по-оригинальнее, по-проще
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333469
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяесть хранимка
у неё входной параметр техт - 1,2;2,2;.............
т.е. пара цифр (int) разделенные запятой,эти пары разделены ;
таких пар от 1 до хз
задача вставить их таблицу

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE table1 (
  id INT NOT NULL AUTO_INCREMENT,
  value1 INT DEFAULT NULL,
  value2 INT DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB;



пару решения я знаю, но не нравятся они мне.
надо что-то по-красивее, по-оригинальнее, по-проще

есть одна мулька, точно по-оригинальнее,
на любителя -- по-красивее
и однозначно по-НЕпроше.

Если хранимка работает как надо и не портит вам эстетику до
рвотного рефлекса, то оставьте ее в покое ...
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333471
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только идея, не проверял
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE PROCEDURE p (IN s_in TEXT)
BEGIN
  SET @s=CONCAT('INSERT INTO table1 (value1, value2) VALUES (', REPLACE (s_in,';','),('),')');
  PREPARE ps FROM @s;
  EXECUTE ps;
  DEALLOCATE PREPARE ps;
END;
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333475
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Как бы и таблица дебильная, и задача дебильная, красивого решения тут вообще быть не может.

Красивое решение -- переделать в первую очередь таблицу, устранив аномалию нарушения 1ой нормальной формы,
а далее --уже будешь вставлять записи обычным INSERT.
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333479
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

"по красивее", "по оригинальнее", "по проще" - выберите 2 из трех. :)

Кстати, а где текст "хранимки", дабы понять что есть "некрасиво", "не оригинально" и "не просто", гадать предложите?
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333592
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftтолько идея, не проверял
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE PROCEDURE p (IN s_in TEXT)
BEGIN
  SET @s=CONCAT('INSERT INTO table1 (value1, value2) VALUES (', REPLACE (s_in,';','),('),')');
  PREPARE ps FROM @s;
  EXECUTE ps;
  DEALLOCATE PREPARE ps;
END;



это работает и мне пока нравится (надо проверить конкретной реализации) , у меня тоже была мысль в REPLACE, но более грубо использовалось, забыл, что values можно так использовать...
спасибо
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333595
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109вадя,

"по красивее", "по оригинальнее", "по проще" - выберите 2 из трех. :)

Кстати, а где текст "хранимки", дабы понять что есть "некрасиво", "не оригинально" и "не просто", гадать предложите?

выбираю 3 из 3 !!!
miksoft - супер!!!!
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333621
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так как эту строку я формирую на андроиде, то никто не мешает сформировать и передать её в таком виде (1,2);(3,5).....
то ваще получается просто
тут из двух красивостей надо выбрать более оптимальное,
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333654
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

:) Хорошо, что вам понравилось. Мне просто осталось непонятным заради чего делать хранимку, когда тоже самое легко отправить с клиента, да ещё и забинтовав параметры от инъекций... не люблю ХП "в принципе". :)
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333687
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Arhat109
...ты просто не умеешь их готовить...

помимо защиты они могут много чего делать. особенно когда клиент слабый,
хотя б подготовка данных для деревьев. разбив задачу на две части (клиент, сервер) много упрощается,
код на клиенте становится проще, нагляднее.
и если не использовать PREPARE то хранимка выполняется быстрее, чем переданная на сервер sql строка.
и как правило с хранимками число обращений к серверу заметно уменьшается
отладкау намного проще производить, особенно используя dbForge, где хранимки можно дебажить.
а такая приятная вещь как курсор в mysql?
ну и трафик к серверу меньше :)
я вкусил их ещё юзая mssql,
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333727
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадявыбираю 3 из 3 !!!
miksoft - супер!!!!На самом деле для боевых условий мой вариант не так уж хорош. Как минимум, нужно что-то делать с инъекциями. Еще можно налететь на превышение max_allowed_packet. Можно налететь на ошибку синтаксиса, если на андроидной стороне произойдет сбой в формировании строки.
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333730
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяа так как эту строку я формирую на андроиде, то никто не мешает сформировать и передать её в таком виде (1,2);(3,5).....Так больше символов получается. А для плохой связи это может быть заметно.
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333731
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяа такая приятная вещь как курсорну фу :)
использую только там, где без них ну вообще никак (читай "где вместо них надо громоздить семиэтажные джойны по неравенствам с переменными и т.п.")
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333781
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяя вкусил их ещё юзая mssql,
И что ниразу не уперся в какие-нибудь проблемы ?
Приходилось писать функции на C из-за отсутствия привычных ?
А то, что процедуры не компилируются, это нормально?
А то, что триггер на действие всего один, это нормально ?
Курсоры эти выполняют весь запрос в момент открытия и считывают все во временную таблицу. Кроме того, однонаправленные вперед и только для чтения.

Обычно все, кто обвиняют mysql в недоразвитости, как раз мигрируют с серьезных баз, не обнаруживают привычного и начинается.
Вот просто нет такой культуры использования pl/sql и все.
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333806
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftвадяа так как эту строку я формирую на андроиде, то никто не мешает сформировать и передать её в таком виде (1,2);(3,5).....Так больше символов получается. А для плохой связи это может быть заметно.

это я и имел ввиду , когда говорил про оптимальный вариант
насчет инъекций, смотря на каком этапе их ожидать. как минимум разделитель ; можно заменить на любой другой, сделать проверку на отсутствие ; в этих данных в самой хранимке. ну и передача данных на сервер mysql по wss протоколу через прослойку на сервере, типа tomcat. ну а если взломали код...тут можно нагородить защиту по ip и пр...
но при хранимках бороться с инъекциями проще, в самой хранимке можно устроить анализ на инъекци.
даже если взломан код клиента, хранимки защищают саму структуру базы, в каждой хранимке входные данные имеют определённую структуру и если они не соответствуют ей? просто не выполнить хранимку и все. это если строковые данные , а если числовые - сам сервер даже не даст зайти в хранимку.

авторЕще можно налететь на превышение max_allowed_packet. Можно налететь на ошибку
тут проще, хотя надо всегда это отслеживать, в моём случае при нормальной работе клиентской части это трудно достигнуть.


авторну фу :)
использую только там, где без них ну вообще никак (читай "где вместо них надо громоздить семиэтажные джойны по неравенствам с переменными и т.п.")
согласен, что курсоры редко используются.
...
Рейтинг: 0 / 0
хочу красивое решение
    #38333830
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ что ниразу не уперся в какие-нибудь проблемы ?
Приходилось писать функции на C из-за отсутствия привычных ?
А то, что процедуры не компилируются, это нормально?
А то, что триггер на действие всего один, это нормально ?
Курсоры эти выполняют весь запрос в момент открытия и считывают все во временную таблицу. Кроме того, однонаправленные вперед и только для чтения.


еще не разу не упираля в проблемы с хранимками, было по началу, когда переходил с mssql -там для деревьев, готовый мехонизм, специализированный, и прочие вкусности, которых нет mysql, но в mysql есть свои вкусности...
смог обойтись всеми фунциями mysql, это по моим задачам.
как-то обходился без триггеров в хранимках, очень просто, всё можно делать в хранимке и без триггера.
курсоры разговор отдельный, хорошо что они есть, их применять надо по месту.

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

:) возможно.

Я просто считаю что "хранимки" - зло "по определению" для писателей с ЯП, которым трудно нормально перейти на теорию множеств (Реляционную Алгебру). РМД о них ничего не знает и это - правильно.

Сам ХП использую только когда надо из крона или какого ещё демона заставить Мускуль сделать "что-то полезное"... то там, где ввод человеческого фактора отсутствует "по оперделению". Да и мои тесты показывали, что ХП уступает запросу с клиента в среднем на 30% даже с предпраред...

но это уже, так в порядке оффтопа.
...
Рейтинг: 0 / 0
хочу красивое решение
    #38334292
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поискал для самообразования
Особенности использования
При первом запуске хранимой процедуры, она компилируется и в дальнейшем обращение к этой хранимой процедуре осуществляется быстрее.
Рекурсивные процедуры по-умолчанию заблокированы, но могут допускаться на сервере, предварительно установив переменную max_sp_recursion_depth в ненулевое значение. Функции же не могут быть рекурсивными.


отсюда http://computer-science-labs.blogspot.ru/2012/09/mysql-stored-procedures-functions.html

В большинстве СУБД при первом запуске хранимой процедуры она компилируется (выполняется синтаксический анализ и генерируется план доступа к данным). В дальнейшем её обработка осуществляется быстрее. В СУБД Oracle выполняется интерпретация хранимого процедурного кода, сохраняемого в словаре данных. Начиная с версии Oracle 10g поддерживается так называемая естественная компиляция (native compilation) хранимого процедурного кода в Си и затем в машинный код целевой машины, после чего при вызове хранимой процедуры происходит прямое выполнение её скомпилированного объектного кода.


http://ar871.narod.ru/TEOR/14.htm

Также хранимые процедуры могут ускорять работу приложения за счет того, что они хранятся на сервере БД в скомпилированном виде, что предотвращает потерю времени на повторный разбор и интерпретацию SQL-запроса.
http://hostinfo.ru/articles/825/

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

http://www.opennet.ru/base/dev/db_sql.txt.html
...
Рейтинг: 0 / 0
хочу красивое решение
    #38334304
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпоискал для самообразованияЭто все общетеоретические слова, которые применительно к конкретной СУБД и конкретным условиям могут иметь смысл вплоть до противоположного относительно реальности.
Лучше найдите это в официальной документации.
...
Рейтинг: 0 / 0
хочу красивое решение
    #38334344
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у авторов я не нашел, где это можно найти, остается верить людям.

хоть это и не в тему топика , но вопрос интересный и если у кого есть что-то интересное - поделитесь.
...
Рейтинг: 0 / 0
хочу красивое решение
    #38334354
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяу авторов я не нашел, где это можно найти, остается верить людям.

хоть это и не в тему топика , но вопрос интересный и если у кого есть что-то интересное - поделитесь.
подсказать где взять исходники?
...
Рейтинг: 0 / 0
хочу красивое решение
    #38334380
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
давай
...
Рейтинг: 0 / 0
хочу красивое решение
    #38334419
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрел исходники. Вижу, что в mysql 5.1 не было даже кеша хранимых процедур. Но в mysql 5.5 какой-то кеш в файле sp_cache.cc появился. Однако, страничка http://dev.mysql.com/doc/internals/en/sp-cache.html описывает, что этот кеш не разделяет данные между потоками.
The PROCEDURE cache is maintained on a per thread basis , in THD::sp_proc_cache.


Ну и вот статейка описывает эту гипотезу тоже
http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/
...
Рейтинг: 0 / 0
хочу красивое решение
    #38334504
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
предлагаю продолжить тут 14579207
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / хочу красивое решение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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