|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
используй IBExpert. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 00:31 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixx> Учусь не в универе, учусь как раз с книжками. denixx> Универ, слава богу, в этом году закончил. Какая разница где, главное результат. :) denixx> Читал Мартина Грабера, "Понимание SQL", с этим ужасным переводом... denixx> Если устроюсь работать, куда хочу, куплю бумажную версию Купи (или скачай, если денег нет) книги "Мир Interbase" и "Firebird. Руководство разработчика баз данных". Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 00:34 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxА с ФБ и спрашивать, кроме вас, некого. Как это "некого"? А Language Reference?.. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 00:41 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixx, Код: plaintext
Ну сам SQL не так уж сильно отличается. Различие в основном в ХП. Я думая, что у тебя и в MySQL эти запросы криво работали ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 12:31 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Симонов Денисdenixx, Различие в основном в ХП. Ну да, я это имел ввиду. Симонов Денисdenixx, Я думая, что у тебя и в MySQL эти запросы криво работали Остальные были однотипные: "вставить или обновить запись, в качестве вывода показать, что произошло". Последний - вполне возможно. Но вроде данные выбирал "правильно", на первый взгляд. HAVING, конечно, сильно упростил задачу. Проверил только что, вроде эта конструкция не возвращает дубликатов строк. А в мускуле приходилось в эту околесицу добавлять тот самый GROUP BY e.id или DISTINCT чтобы не выводил одинаковых строк для каждой записи в таблице experience. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 14:17 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
kdvиспользуй IBExpert. Собственно, в нём и разрабатывал. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 14:18 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixx> Собственно, в нём и разрабатывал. Жаловаться на IBE, сравнивая с другими инструментами, - это просто грех и ересь, ИМХО. :) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 14:57 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Код: plaintext 1. 2. 3. 4. 5.
В мускуле, опять же, прокатывало, отображало сначала сгруппированный по первым трём буквам столбец "Name", и уже только потом сортировал по "oLvl" Текст в m.name содержится такой: "Раз два три 1" "Раз два три 2" "Раз два три 3" ... "Раз два три 99999" "Два три четыре 1" ... "Два три четыре 99999" "Три четыре пять 1" ... "Три четыре пять 99999" Если из кода убрать SUBSTRING, то будет криво сортировать по oLvl, будет учитывать номер в тексте "Name" Здесь про SUBSTRING ничего не сказано. Вроде можно этот субстринг запихнуть в перечисление SELECT'а (сделать лишний столбец), и сортировать по нему. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 22:38 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Тут тоже про SUBSTRING ничего нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 22:52 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixx, а) накой там UNION ? б) почему не UNION ALL ? в) select * from (твой запрос без order by) order by чего надо ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 22:57 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
hvlad, а) сначала выводятся строки с m.occupantUserId = NULL, а через UNION выводятся с m.occupantUserId = числу. б) дубликатов строк не предвидится. в) это зачем? Чтобы сортировка была для всего результата, а не для нижнего SELECT'а? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 23:14 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixx, RTFM, RTFM и ещё много раз RTFM а) решается обычным order by без union б) т.е. на ненужную сортировку (о которой ты и не знаешь) тебе плевать в) в UNION нет сортировки отдельных селектов, учи язык ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 23:25 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
hvladdenixx, RTFM, RTFM и ещё много раз RTFM а) решается обычным order by без union б) т.е. на ненужную сортировку (о которой ты и не знаешь) тебе плевать в) в UNION нет сортировки отдельных селектов, учи язык а) Мне нужно сортировать по полю с названием (m.name), и потом по полю с левелом (s.level). Если я вставлю в ORDER BY поле m.occupantUserId в начале ORDER BY, то это собъёт мне сортировку по названию (m.name). Если я вставлю это поле в конец ORDER BY, то это мне ничего не даст. б) А можно поподробнее? в) Я это понял ещё при использовании MySQL, просто увидел уже достаточно различий, чтобы спросить, не делается ли сортировка по отдельным селектам. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 23:57 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxа) Мне нужно сортировать по полю с названием (m.name), и потом по полю с левелом (s.level). Если я вставлю в ORDER BY поле m.occupantUserId в начале ORDER BY, то это собъёт мне сортировку по названию (m.name). Если я вставлю это поле в конец ORDER BY, то это мне ничего не даст. б) А можно поподробнее? в) Я это понял ещё при использовании MySQL, просто увидел уже достаточно различий, чтобы спросить, не делается ли сортировка по отдельным селектам. а) Нет. Тебе нужно сначала сортировать по m.occupantUserId is [not] null, а уже потом по m.name. hint: используй CASE m.occupantUserId WHEN NULL THEN 0 ELSE 1 END б) UNION DISTINCT каким образом удаляет дубликаты, по-твоему ? в) Стандарт языка не зависит от СУБД. Правда MySQL ему редко следует. Но не до такой же степени. Итого - учиться, учиться и учиться. А до "Готовлю базу данных для эксплуатации" ещё с годик подождать. Минимум. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2011, 01:12 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixx Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Помоему при таком оформлении запрос читается гораздо лучше: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2011, 08:19 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
А по-моему, пофиг. Зато вот использование BETWEEN вместо этой лажи в условии сразу читаемости добавляет. Ну и таки UNION ALL. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2011, 11:26 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
WildSeryНу и таки UNION ALL. Не нужен там UNION, никакой ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2011, 12:19 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
hvlad, А, ну да. Я в запрос не вчитывался. Точно, не нужен. Имитация LEFT JOIN через UNION... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2011, 12:43 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
hvladа) Нет. Тебе нужно сначала сортировать по m.occupantUserId is [not] null, а уже потом по m.name. hint: используй CASE m.occupantUserId WHEN NULL THEN 0 ELSE 1 END б) UNION DISTINCT каким образом удаляет дубликаты, по-твоему ? б) Сделал UNION ALL, который, может, уберу, если разберусь с пунктом а). hvladА до "Готовлю базу данных для эксплуатации" ещё с годик подождать. Минимум. Готовлю базу данных для учебной эксплуатации в учебном проекте для изучения работы с БД в Java. Так хоть и "масляное масло", но понятнее будет, что я имел ввиду, когда писал эту фразу. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2011, 14:51 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxГотовлю базу данных для учебной эксплуатации в учебном проекте для изучения работы с БД в JavaЭто совсем другое дело ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2011, 15:04 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Что-то FB медленно работает у меня с прогой. Обрабатывает 14 записей в секунду. Потом постепенно планка опускается до 3-4 записей в секунду и потом прога зависает. Пробовал ставить ClassicServer, через него работать - то же самое. Технология следующая: Открываем коннекшн. Создаём CallableStatement. Вызываем хранимую процедуру, которой передаём необходимые параметры. ХП проверяет, если запись с таким ID уже есть в базе, обновляет эту запись. Если такого ID в базе нет, то делает инсерт. ХП в выходную переменную сообщает результат, что она сделала, инсерт или апдейт. Получаем этот результат и выводим в консоль. Закрываем коннекшн. Далее проделывается то же самое со следующей записью. Мускул же обрабатывает 40-150 записей в секунду. Но там используется InnoDB, и если количество записей в секунду слишком большое, могут выскакивать эксепшены о том, что "буферная память переполнена (слишком много соединений?)". Соединение используется только одно для всех потоков. Если быть точнее, то потоки синхронизируются по внешнему объекту, чтобы в базу в один момент времени писал только один поток. Насколько я понимаю в мускуле просто используется буферизация в ОЗУ всего этого дела, а ФБ каждый раз обращается к диску для чтения/записи, потому и медленнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2011, 14:26 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixx, Кхе-кхе. По "коннекшену" на каждую запись - это сильно! Hint number one: вставлять/обновлять несколько записей можно и в одном подключении. Hint number two: даже приведённая схема работы не должна приводить к зависанию - ищите, Шура, ищите глюки в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2011, 15:14 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixx Далее проделывается то же самое со следующей записью. вы просто издеваетесь над сервером (или над собой). denixxХП проверяет, если запись с таким ID уже есть в базе, обновляет эту запись. Если такого ID в базе нет, то делает инсерт. http://www.ibase.ru/devinfo/testiu.htm denixxи если количество записей в секунду слишком большое, если записывать напрямую, без всяких одбц, ждбц, ado и прочего ужаса, то скорость вставки даже на десктопном компе может быть 24 тысячи записей в секунду . denixxОбрабатывает 14 записей в секунду. Потом постепенно планка опускается до 3-4 записей в секунду и потом прога зависает. стыдоба. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2011, 16:41 |
|
|
start [/forum/topic.php?fid=42&gotonew=1&tid=1599861]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
150ms |
get topic data: |
10ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
others: | 290ms |
total: | 568ms |
0 / 0 |