|
|
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
Есть селективная процедура. Вида Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. При ее выполнении получаю ошибку "Multiple rows in singleton select". Если процедуру перекомпилировать, ничего в ней не изменяя, ошибка пропадает. Backup/Restore (даже с ключем -va) ошибку не убирают. Ошибка всегда проявляется на новой инсталляционной базе. Она всегда разворачивается из бэкапа. Сервер IB XE3. У кого-нибудь есть идеи, что это какое и как с этим бороться? С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:00:47 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
В интербейсе не силен! Так и не понял, пробовали перекомпилировать хранимку и снова сделать бекап/рестор? И после рестора снова ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:12:20 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
anpl, После перекомпиляции ошибка пропадает. После бэкапа/ресторе - нет. Напрягает, что ошибка регулярно возникает на инсталляционных базах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:17:31 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
пиши в саппорт Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:21:38 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, бэкап-рестор не "перекомпилирует" метаданные. Если процедура криво написана, значит ее надо исправить и перекомпилировать. ошибка Multiple rows in singleton select - runtime, т.е. возникает когда запрос select ... from ... where ... into :... возвращает больше 1 записи. Так что ошибка может возникать, а может и пропадать в зависимости от данных. http://www.ibase.ru/devinfo/sp_call.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:21:55 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
Может где-то зависимость есть? Попробуй всё-всё перекомпилировать перед бекапом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:22:12 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
kdvЕсли процедура криво написана, значит ее надо исправить и перекомпилировать.Еще раз уточняю _Vasilisk_Если процедуру перекомпилировать, ничего в ней не изменяя , ошибка пропадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:28:00 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Ошибка всегда проявляется на новой инсталляционной базе. Она всегда разворачивается из бэкапа. _Vasilisk_Если процедуру перекомпилировать, ничего в ней не изменяя , ошибка пропадает. Создай новую "инсталляционную базу", предварительно перекомпилировав в ней эту процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:34:15 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Еще раз уточняю Заодно уточни когда эта ошибка начинает возникать. Если при восстановлении БД из "инсталляционного" бэкапа, значит этот бэкап - битый, сделан с битой БД или с БД другой версии (или даже системы). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:37:02 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Инсталляционный бэкап делается на IB 2009. Разворачивается на XE3. В оригинальной базе уже перекомпилировал эту процедуру. Ошибка вылезла опять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:50:11 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Если процедуру перекомпилировать, ничего в ней не изменяя, ошибка пропадает. тогда я еще раз повторю, что blr, скомпилированный однажды, никакими манипуляциями кроме перекомпиляции объекта явным ALTER не перекомпилируется. И что указанная ошибка - runtime-ошибка, а не ошибка синтаксиса. Может, у вас база со старых версий ИБ кочует по новым только через b/r? Если проблема воспроизводится - да, значит есть баг, можете слать репорт. Но я бы сначала поискал проблему у себя. Заодно проверив версию IB XE3, поскольку их уже 4 апдейта вышло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:59:42 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_бэкап делается на IB 2009. Разворачивается на XE3. Значит нет у них совместимости. Вместо "инсталляционного бэкапа" сделай "инсталляционный скрипт". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:00:04 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_В оригинальной базе уже перекомпилировал эту процедуру. Ошибка вылезла опять лаконичность в данном случае не приветствуется. Вы хотите проблему решить? Описывайте подробно. В оригинальной базе - это в какой? Под IB2009 или под ХЕ3? "Ошибка вылезла опять" - это как? После перекомпиляции процедуры под ХЕ3? Текст процедуры смотрели? Там точно нет запросов, которые могут вернуть 2 строки вместо одной? я бы рекомендовал при возникновении ошибки по очереди взять подозрительные запросы из процедуры, и выполнить их в IBexpert, чтобы убедиться, что эти запросы возвращают 1, а не более записей. Проверить-то элементарно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:02:41 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
kdv, Есть девелоперская база на 2009. Из нее, путем проведения очищающего скрипта и последующего бэкапа создается инсталляционная. После первого обнаружения ошибки процедура была перекомпилирована в девелоперской базе. На очередном релизе ошибка вылезла на тестируемом стенде на ХЕ3 Вот код проблемной процедуры Код: 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. 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. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. Вот код процедуры sp_i_usr_get_full_name Код: 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. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:15:49 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, а проблема разве не в SELECT COALESCE(MAX(ets."DATE_TIME"), CURRENT_TIMESTAMP) ... _Vasilisk_В таблице users поле ID - первичный ключ да пофиг что там первичный ключ. Допустим, индекс повредился - и полезли дубли в ПК. Проверяйте, не доверяйте глазам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:19:15 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
kdvа проблема разве не в SELECT COALESCE(MAX(ets."DATE_TIME"), CURRENT_TIMESTAMP)Так ведь MAX() kdvДопустим, индекс повредился - и полезли дубли в ПК.Рестор с валидацией (-va) проходит. kdvПроверяйте, не доверяйте глазам.Глазами проверил :). Две записи ID 3 и 4. Сейчас попробую базу кинуть. Порежу ненужные таблицы и кину ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:29:55 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Dimitry Sibiryakov, Инсталляционный бэкап делается на IB 2009. Разворачивается на XE3. В оригинальной базе уже перекомпилировал эту процедуру. Ошибка вылезла опять Вероятно в support, такое впечатление, что поменяли формат храниения скомпилированных процедур, в качестве теста попробовать в процедуре поменять for select на for select first 1 сделать b/r и посмотреть что получится. Может быть связано и с этим Restoring database results in the error "unassigned code" : Restoring database results in the error "unassigned code" When restoring a database with InterBase XE, get the error unassigned code. With databases with a long lineage or databases backed up with InterBase 2009 and restored with InterBase XE, each case has different metadata security settings. So when selecting a system table (for example: RDB$RELATIONS) you get the error message: no permission for read/select access to table RDB$RELATIONS by user SYSDBA. This error occurs with databases which have these criteria: Originally created with a version of InterBase prior to InterBase 6.5. Backed up with a version of InterBase prior to InterBase 2009. Readmeta.sql has not been previously applied. This behavior is exhibited due to stricter enforcement of meta data rights in InterBase XE during the restore of a database. Solution: To resolve this problem execute readmeta.sql against your database before you back it up. readmeta.sql may be found in \examples\security. You can execute readmeta.sql against your database using isql or IBConsole. Explanation: The problem occurs with databases that have a long lineage. The two cases are (1) a database has a restore history of IB6->IB7->IB2007->IB2009->IBXE; and (2) a database backed up and restored as IB2009->IBXE. Each case has different metadata security settings. The first instance never had metadata security because it originated from IB6. However with the second instance, it was created (not restored) by IB2009 with a full complement of security privileges for all system tables. With the first case, the database was backed up and restored and with each succeeding release, the new release would install privileges for the new system tables in that release (think RDB$USERS, RDB$ENCRYPTIONS, RDB$ROLES, etc.). But it couldn't alter the original system tables because it had no way of knowing if the database owner had already altered their security privileges. For example, a user might have revoked all privileges to RDB$TRIGGERS and RDB$PROCEDURES to conceal their trigger and stored procedure code. Also, in the first case, a SYSDBA may have run readmeta.sql years ago and refined the metadata from that baseline to a custom security profile. InterBase cannot override that customization by automatically resetting it after the XE restore. InterBase XE can't assume that every database it restores should unconditionally install the default metadata privileges because it doesn't know the history of individual databases. So it is recommended to run readmeta.sql, which sets the default or starting point for configuring it the way you want it. This advice is independent of whether you are migrating to XE. Example using isql: isql "path to database" -user sysdba -password masterkey -i readmeta.sql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:42:03 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
NikolayV81Вероятно в support, такое впечатление, что поменяли формат храниения скомпилированных процедурИнтересное предположение. Проверю. Есть еще такой момент - я проблемную базу забєкапил на ХЕ3 и восстановил обратно на 2009. Ошибка осталась ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:49:23 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Какая-то хрень. Перенес базу на 2009. После перекомпиляции ошибка осталась. Стал рабираться. Проблема в запросе Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Он возвращает три записи с текущим временем. Если сделать такой запрос Код: sql 1. 2. 3. 4. возвращаются три записи. У каждой поле DATE_TIME заполненно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 16:15:56 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Сейчас убрал COALESCE, поставил просто ручную проверку после запроса IF NULLL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 16:21:42 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ ets."STATUS" = 3 попутный вопрос - а зачем тут двойные кавычки? Не нужны они вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 16:22:30 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk__Vasilisk_, Код: sql 1. 2. 3. 4. Привет. А если Код: sql 1. 2. 3. 4. Сколько записей будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 16:28:59 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_возвращаются три записи. У каждой поле DATE_TIME заполненноID одинаковые у записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 16:31:54 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
roadster_Vasilisk_возвращаются три записи. У каждой поле DATE_TIME заполненноID одинаковые у записей? А какая разница? MAX - не должен 3 записи возращать... Но почему то кажется что база побитая получается, и там возможно не только это не работает... p.s. На дурака, max там никак не переопределяли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 16:38:59 |
|
||
|
Multiple rows in singleton select
|
|||
|---|---|---|---|
|
#18+
NikolayV81, В общем опыты показали, что от конструкции COALESCE(MAX()) у IB 2009 сносит крышу. Симптомов я уже нашел три разных. По идее в ХЕ3 этот баг закрыли, поэтому при перекомпиляции все начинало работать. Всем спасибо. Вопрос закрыт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 16:43:23 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38616637&tid=1563675]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 507ms |

| 0 / 0 |
