|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Перевожу учебный проект с MySQL на Firebird Embedded. Готовлю базу данных для эксплуатации. Это вроде последнее, что останавливает от перехода на Firebird. Есть таблица "sector", в неё посредством хранимой процедуры вставляется или изменяется запись. Итак, хранимая процедура в MySQL, как она есть: Код: 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. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67.
Теперь то, что я наваял в IBExpert: Код: 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. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73.
Если возле ' Запись обновлена.'); оставить символ ";", то IBExpert указывает на окончание этой строки. Если точку с запятой убрать, то указывает на следующий END. Не пойму, что он от меня тут хочет. Дальше я пока не правил сильно. Правильно ли я использую переменные, передаваемые в хранимую процедуру? Просто "_ID", с кавычками? Правильно ли я делаю CONCAT? Помогите плз, а то хелпы на ibexpert.net не очень радуют наличием нужной информации. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2011, 23:54 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
И то, что я вместо DATETIME поставил timestamp, это правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 00:24 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
1. как писать процедуры: http://www.ibase.ru/devinfo/sp_call.htm читай про "Обработка данных в процедурах" потому что вот это select CONCAT('ID: ', _id , ' FullName: ', fullName , ' Запись обновлена.'); во-первых фигня, т.к. Select без from в IB/FB нет. Во-вторых, у тебя в процедуре данные никуда не возвращаются. И в третьих, в IB/FB нет CONCAT, можно просто писать result=cast(id as varchar(15))||FullName||' Запись обновлена' 2. двойных кавычек нафигачил зря. http://www.ibase.ru/ibfaq.htm#dtproblem Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
в таблицах, к счастью, этого ужаса ("имя"), как я вижу, нет. Впрочем, можно оставить и так, если тебя не напрягает закавычивание таких имен переменных. Без двойных кавычек идентификатор должен начинаться с латинской буквы. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 00:44 |
|
Помогите пожалуйста разобраться с хранимой процедурой в 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. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77.
При выполнении выводит следующее: EXECUTE PROCEDURE addorchangerecord(25790, 1, 1, 'One', 'Два', 'Three', '2011-02-16 12:02:09', 51, 'Четыре', 1, 6, 10.4, NULL, 1050); 1 record(s) was(were) updated in SECTOR ------ Результаты выполнения процедуры: ------ OUT = ID: 1 FullName: Два Запись обновлена ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 16:56 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxOUT = ID: 1 FullName: Два Запись обновлена А вот нахрена эти понты? Косплеишь Капитана Очевидность?.. И зачем вообще процедура там, где хватит одного запроса UPDATE OR INSERT?.. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 17:11 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
плохо прочитал. для не-селективных процедур (вызываемых по execute) suspend не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 17:11 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovdenixxOUT = ID: 1 FullName: Два Запись обновлена А вот нахрена эти понты? Косплеишь Капитана Очевидность?.. Да, косплею КО ) Это потом используется для формирования лога, что происходит вообще в приложении. Я только изучаю Java и таково было решение при использовании MySQL. Dimitry SibiryakovИ зачем вообще процедура там, где хватит одного запроса UPDATE OR INSERT?.. Опять же, таково было решение для MySQL, решил сделать по образу и подобию, чтобы не сильно курочить уже готовый код в Java. Это не единственная процедура в БД, она выбрана, как наиболее простая, чтобы разобраться с логикой запуска. kdvплохо прочитал. для не-селективных процедур (вызываемых по execute) suspend не нужен. Убрал, спасибо. -=-=- Ну, теперь осталось только заставить Java подружиться с этой хранимой процедурой... Пока-что выбивает ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 17:49 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxЭто потом используется для формирования лога, что происходит вообще в приложении. А что, для того, чтобы записать строчку в лог, обязательно надо её получить с сервера? Прямо в тексте программы её написать Жаба не позволяет?.. denixxрешил сделать по образу и подобию, чтобы не сильно курочить уже готовый код в Java. Тебе всё равно придётся менять строчку вызова мускульной процедуры, так какая разница - написать вместо неё "EXECUTE PROCEDURE" или "UPDATE OR INSERT"?.. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 17:57 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxПока-что выбивает ошибку. здесь подобные выражения, без указания точного сообщения об ошибке, дают повод заподозрить низкий IQ. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 18:13 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
kdv, Я просто тогда ещё даже не загуглил ошибку :) Надо же было самому разобраться. Нашел тут , что Malformed string = проблемы с кодировкой. Оказалось, что это у меня в Eclipse стоит в настройках сохранение всех файлов проекта в win1251, а надо UTF8. Поменял, перекодировал файл, и "русские" строки теперь прокатывают. Дальше - больше. Exception in thread "main" org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error SQL error code = -504 Invalid cursor reference Cursor is not open Код программы: Код: 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.
Ожидаемое поведение программы: Выполняет запрос, выводит строчку "ID: 1 FullName: Два Запись обновлена" в консоль... Что-то нашел по этому эксепшену здесь , но пока не пойму, что мне делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 19:07 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxprstmt.getResultSet(); У EXECUTE PROCEDURE нет ResulSet-а. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 19:14 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, О. Даже так... А как же тогда вернуть из переменной текст? Я с такой задачей ещё не сталкивался. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 19:19 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxА как же тогда вернуть из переменной текст? То, что у неё на выходе не ResultSet, а скалярный вектор, тебя сбивает с толку? Почитай справку по JDBC. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 19:31 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxА как же тогда вернуть из переменной текст?Либо через Select from Proc, либо через выходные параметры после вызова Exec Proc. И прочитай, наконец, статью, ссылку на которую тебе уже дали. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 19:35 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
http://www.ibase.ru/devinfo/sp_call.htm Код: plaintext 1. 2. 3.
Это, походу, Delphi? Как такое сделать на Java? Должно быть всё просто... Но что-то пока не доходит :( Не знаю, какой метод использовать в Java. В методах prstmt ничего полезного не вижу. Сам prstmt.execute(); возвращает boolean. Мне от него ни холодно, ни жарко. Подскажите плз, а то что-то не помогает мне гугл... А только наоборот, куда-то уводит в дебри. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 20:23 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустамчерез выходные параметры после вызова Exec Proc. Интересует этот вариант. Такого я ещё не делал вообще. Гаджимурадов РустамИ прочитай, наконец, статью, ссылку на которую тебе уже дали. Статью почитал, там примеры для Delphi, как я понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 20:26 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxКак такое сделать на Java? Должно быть всё просто... Но что-то пока не доходит :( Не знаю, какой метод использовать в Java. В методах prstmt ничего полезного не вижу.Java тут никто не знает! (с) Задай вопрос в профильном форуме - помогут. Ищи что-то вроде prstmt.Get_Нужный_Тип ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 20:29 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxчто-то не помогает мне гугл... Выкинь свой гугль, попробуй мой: http://www.google.ru/#sclient=psy&hl=ru&newwindow=1&site=&source=hp&q=Java+JDBC+execute+procedure+Firebird&pbx=1&oq=Java+JDBC+execute+procedure+Firebird&aq=f&aqi=&aql=&gs_sm=e&gs_upl=6139l20548l0l21826l38l27l1l0l0l3l2117l22332l6-1.4.7.2l14l0&bav=on.2,or.r_gc.r_pw.&fp=89bff89e8f2573a0&biw=1011&bih=469 Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 20:30 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Нашёл, наконец! В мануале к JayBird на странице 47 была описана такая вещь, как CallableStatement: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Добавился ещё один вопрос в тексте запроса (15й), в этом месте и регистрируется выдаваемая переменная. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2011, 22:59 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov пишет: DS> скалярный вектор Можно, я это запишу ? :) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 09:34 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixx, А если поискать по форуму Java, то можно найти готовый пример по работе с хранимыми процедурами, я когда то выкладывал. А так удачи, это только азы азов в Java. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 14:59 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
AndreyUBудачи Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 16:12 |
|
Помогите пожалуйста разобраться с хранимой процедурой в 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. 23. 24. 25. 26. 27. 28. 29. 30.
Код: plaintext 1. 2. 3. 4.
Было через знак = Код: plaintext 1. 2. 3.
Пробовал ещё into в конец ставить, как на ibase написано: Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 16:36 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
так писать нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 16:48 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
kdv, А в мускуле можно. Как же тогда выйти из ситуации? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 16:58 |
|
Помогите пожалуйста разобраться с хранимой процедурой в 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 17:03 |
|
Помогите пожалуйста разобраться с хранимой процедурой в 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. 26. 27. 28. 29. 30.
Код: plaintext 1. 2. 3. 4.
Так краем глаза Убери into :min_ into :max_ :max_-:min_ as DIFF впрочем заодно и as Rasst as MIN as MAX Замени ORDER BY s."LEVEL", Rasst; на ORDER BY 7,4 и добавь into в сам основной select ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 17:06 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
не, там с логикой запроса засада, на логику не смотреть, я тупо скопипастил и обрамил! Я принцип я хотел показать - результат запроса идет в переменные, в into. И только потом над ними выполнять действия всякие. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 17:06 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxЧто-то я опять не пойму, чего от меня хочет компиляторRTFM'а он от тебя хочет ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 17:27 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Осталась последняя хранимая процедура. Остальные 4 были достаточно однотипными и похожими на то, что указано в старте топика. У меня что-то даже идей нету, как переделать этот код. Буду читать маны, может найду что-то похожее. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 18:04 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
О, тут уже на вторую страницу насобиралось постов, а я только сейчас увидел. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 18:35 |
|
Помогите пожалуйста разобраться с хранимой процедурой в 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. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
Invalid token. Dynamic SQL Error. SQL error code = -104. Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 20:25 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Пробовал Код: plaintext 1.
Пробовал Код: plaintext 1.
Не помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 20:35 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixx, Так не удивительно ведь агрегирующей функции нет ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 20:38 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Да, без GROUP BY откомпилировалось, спасибо. Только теперь интересно, как оно будет реагировать на несколько записей в таблице experience с одинаковым id и разным таймштампом. Надо наверное DISTINCT добавить. Проверю, как вернусь домой. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 20:50 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxСделал как-то через пень-колоду...Вот что mysql делает с людьми denixx, послушай добрый совет - научись писать запросы, ну почитай уже учебник по SQL, что ли... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 20:53 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Так это у меня наверное в мускуле не совсем правильно написано :-[ Но работало. Хотя может там как-то по хитрому работало. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 20:57 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
hvlad, Да читаю потихоньку, читаю. Просто это было написано до прочтения книги, и работало ) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 20:58 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
1. Желательно использовать явный JOIN 2. Инструкция HAVING спасёт отца русской демократии 3. С использованием таблицы experience явный перебор по мне так достаточно один раз связать 4. Твоя процедура всегда будет возвращать одну запись? Если нет то нужен FOR 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. 25.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 21:11 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Симонов Денис, До JOIN'ов я ещё не дошел... Спасибо, а то потом бы ещё долго думал, почему же у меня выводится только одна запись, а оказывается надо в FOR заключать SELECT. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 23:10 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Симонов Денис1. Желательно использовать явный JOIN Хотя вроде в книге "SQL для чайников" написано, что INNER JOIN и обычное перечисление таблиц в FROM дают одинаковый результат. Они врут? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 23:21 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
авторХотя вроде в книге "SQL для чайников" написано, что INNER JOIN и обычное перечисление таблиц в FROM дают одинаковый результат. Они врут? :) Нет не врут, но только при условии, если в секции WHERE есть связь между этими таблицами. Писать можно и так и так, но всё же я предпочитаю использовать явный JOIN, чтобы отделить условие связи таблиц от остальных условий ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 23:31 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Симонов Денис, Код: plaintext 1. 2.
И ошибку сразу видно. Должно было быть в оригинале (s.y <= :y_+:r_) Хорошая конструкция :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 23:38 |
|
Помогите пожалуйста разобраться с хранимой процедурой в 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. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
Выдаёт ошибку Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 23:45 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixxТеперь-то мы чем ему не угодили? Скобки считай, двоечник. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 23:46 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
denixx> Теперь-то мы чем ему не угодили? Скобками. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 23:49 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Ааа. А я уж думал опять какая-то дикая заковырка. И правда, одной скобки не хватало. Dimitry Sibiryakov, Злой ты :) Сразу "двоечник". Я учусь! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2011, 23:56 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
На двойки и учишься. Нет чтобы книжки почитать, на пятерки учиться... :) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 00:00 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
Учусь не в универе, учусь как раз с книжками. Универ, слава богу, в этом году закончил. Просто переучиваться думать из одной СУБД в другую с различающимся синтаксисом, да ещё и не зная толком начал SQL - бяда, бяда ) Мускул-то ещё хоть с натяжкой похож на Sybase, я не говорю, что совсем похож, но процедуры вроде пишутся без проблем. Друг работает с Sybase, его хоть можно спросить, если что-то идёт не так. А с ФБ и спрашивать, кроме вас, некого. Читал Мартина Грабера, "Понимание SQL", с этим ужасным переводом... Остановился где-то на середине. Если устроюсь работать, куда хочу, куплю бумажную версию, думаю с переводом будет получше. Ну вроде база данных готова, осталось только теперь модифицировать Java-код. А до этого написать приложеньице, которое сможет из одной БД в другую перелить все данные, которые уже наработаны. Можно конечно этого и не делать... но всё же так будет интереснее. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 00:18 |
|
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
|
|||
---|---|---|---|
#18+
А с мускулом, кстати, так же шишки набивал. Но там Workbench на лету показывает ошибки синтаксиса, а тут только на этапе компиляции, поэтому и не заметил скобку. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 00:20 |
|
Помогите пожалуйста разобраться с хранимой процедурой в 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?all=1&fid=42&tid=1599861]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
178ms |
get tp. blocked users: |
2ms |
others: | 308ms |
total: | 677ms |
0 / 0 |