|
|
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Message: ORA-00937: not a single-group group function ORA-06512: at "SEB.MYTEST", line 10 ORA-06512: at line 2. Читаем уважаемого Тома нашего Кайта: * Статический SQL проверяется в процессе компиляции: Если в коде содержится ошибка, а процедура является действительной и может быть выполнена, то эта ошибка не имеет отношения к SQL. Вот и думаю: где-то кто-то (т.е. я, конечно) из нас чего-то не понимает. ---------------------------------------------------------------------------------------------------- Является ли запрос Код: plaintext 1. ---------------------------------------------------------------------------------------------------- а вообще-то, конечно, достаёт в процессе разработки, что компилятор не ругается сразу ---------------------------------------------------------------------------------------------------- BANNER Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production PL/SQL Release 9.2.0.7.0 - Production "CORE 9.2.0.7.0 Production" TNS for Solaris: Version 9.2.0.7.0 - Production NLSRTL Version 9.2.0.7.0 - Production ---------------------------------------------------------------------------------------------------- спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 09:54 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
С точки зрения синтаксиса здесь все правильно. Ведь может dummy -- это функция, возвращающая константу Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 10:06 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 10:22 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровС точки зрения синтаксиса здесь все правильно. Ведь может dummy -- это функция, возвращающая константу Хм.. мне казалось, что и разрешение имен происходит на этапе компиляции, а не выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 10:25 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 10:31 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Не согласен, Вячеслав, с Вашими примерами. А Вы-то в них верите? Вячеслав Любомудров Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 10:44 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Я к тому, что синтаксис допустимый , а проверять в момент компиляции ХП такие тонкие моменты поле это или функция/константа -- слишком накладно, пожалуй А вот на этапе parse SQL-машина и выдаст ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 10:57 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
andreymxНе согласен, Вячеслав, с Вашими примерами. А Вы-то в них верите? Вячеслав Любомудров Код: plaintext 1. Ну тогда вспомним такую фичу как процедуры с правами вызывающего - что реально будет вызываться станет известно только на момент выполнения. А здесь дело в том, думается, что с точки зрения компилятора COUNT точно такая же функция как и все прочие, не агрегатные. Поэтому синтаксически здесь действительно совершенно корректный код. И ошибка поэтому времени исполнения - происходит только тогда, когда выполняется сама процедура, и sql-машина решает что же ей на самом деле прийдется делать с этим запросом и какие функции вызывать ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 11:00 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
TiGНу тогда вспомним такую фичу как процедуры с правами вызывающего - что реально будет вызываться станет известно только на момент выполнения.Только в данном случае это совсем ни при чем... TiGА здесь дело в том, думается, что с точки зрения компилятора COUNT точно такая же функция как и все прочие, не агрегатные.А это очень похоже, даже при уточнении через алиас, что dummy - это поле, результат не меняется. PS: andreymxа вообще-то, конечно, достаёт в процессе разработки, что компилятор не ругается сразуПрисоединюсь, не очень приятно, что проверка пролетит мимо :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 11:15 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
TiGНу тогда вспомним такую фичу как процедуры с правами вызывающего - что реально будет вызываться станет известно только на момент выполнения. А здесь дело в том, думается, что с точки зрения компилятора COUNT точно такая же функция как и все прочие, не агрегатные. Поэтому синтаксически здесь действительно совершенно корректный код. И ошибка поэтому времени исполнения - происходит только тогда, когда выполняется сама процедура, и sql-машина решает что же ей на самом деле прийдется делать с этим запросом и какие функции вызывать ;-)Да, теперь согласен, всё понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 11:17 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Jannny TiGНу тогда вспомним такую фичу как процедуры с правами вызывающего - что реально будет вызываться станет известно только на момент выполнения.Только в данном случае это совсем ни при чем... Именно причем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 11:20 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Jannny[quot TiG]Ну тогда вспомним такую фичу как процедуры с правами вызывающего - что реально будет вызываться станет известно только на момент выполнения.Только в данном случае это совсем ни при чем... [quot] Это я не к приведенному выше примеру, а альтернативный пример. И по моему оночень даже в тему ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 11:23 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров Jannny TiGНу тогда вспомним такую фичу как процедуры с правами вызывающего - что реально будет вызываться станет известно только на момент выполнения.Только в данном случае это совсем ни при чем... Именно причемПочему? Проверка при компиляции с правами создателя по-любому, так что ИМХо речь не о том, что Оракл не занет, что это будет поле или константа. Тем более, что если переписать: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 11:44 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 11:51 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
ИМХО, разговор уходит в другую плоскость. В процедурах с правами выполняющего большая часть проверок происходит во время исполнения, поэтому как раз к ней претензий нет, а вот в процедуре с правами создателя необходимые проверки производится на этапе компиляции, отсюда и возник вопрос, как же так. Так что присоединяюсь к мнению Jannny, что упоминание authid current_user здесь как-то не при чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 12:02 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 12:17 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Я бы вообще перенес эту проверку на этап выполнения Ведь если значение поля одинаковое -- результат вполне осмысленен и верен Ведь делается такое для scalar subquery (ORA-01427). Может у них такое намерение и было :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 12:18 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Поддерживаю автора темы. Меня такое поведение тоже сильно раздражает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 12:23 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровЯ бы вообще перенес эту проверку на этап выполнения. Ведь если значение поля одинаковое -- результат вполне осмысленен и верен Не согласен. С точки зрения качества программного продукта (надежности, удобства сопровождения итп) крайне нежелательно иметь в коде фрагменты, которые "как правило работают, но могут стрельнуть" (скажем, в Вашем примере поменять return 1 на return dbms_random.value - и что будет?). Поэтому я однозначно предпочитаю подход "ты скажи четко и толком, что тебе надо, а всякую сомнительную неоднозначную фигню я зарублю". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 12:33 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
softwarer Вячеслав ЛюбомудровЯ бы вообще перенес эту проверку на этап выполнения. Ведь если значение поля одинаковое -- результат вполне осмысленен и верен Не согласен. С точки зрения качества программного продукта (надежности, удобства сопровождения итп) крайне нежелательно иметь в коде фрагменты, которые "как правило работают, но могут стрельнуть" (скажем, в Вашем примере поменять return 1 на return dbms_random.value - и что будет?). Поэтому я однозначно предпочитаю подход "ты скажи четко и толком, что тебе надо, а всякую сомнительную неоднозначную фигню я зарублю". Ну эта проблема вряд ли имеет отношение к качеству продукта, все таки если она есть - выстрелит при первом же тестовом запуске. А вообще и сам периодически сталкиваюсь. Пишешь код с нуля - запросы отдельно проверяешь, дописывешь готовый - изменяешь прямо в коде, как итог иногда попадаюсь. Абыдно, да Тем более что на этапе компиляции вся необходимая информация есть и отличить агрегатную функцию от обычной не составляет труда. Права вызывающего конечно отдельный случай, но и там тем не менее проверки доступности и т.п. объектов, используемых в коде, проводятся на этапе компиляции. И это правильно - чем раньше трабл найдем, тем быстрее исправим ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 13:21 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Быть может, по обыкновению скажу несусветную глупость, но мне представляется, что при компиляции PL/SQL кода парсинга SQL-запросов не происходит. Поэтому проверки проверками, а данная ошибка - runtime. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 13:47 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousБыть может, по обыкновению скажу несусветную глупость, но мне представляется, что при компиляции PL/SQL кода парсинга SQL-запросов не происходит. Поэтому проверки проверками, а данная ошибка - runtime. не ну я конечно понимаю самокритика в ответ включена, но все равно подумать нужно было над тем что пишешь, а еще лучше попробовать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. как несложно понять из этого примера парсинг запроса таки произошел и откровенную лажу, типа доступа к полям, которых действительно нет в таблице оно все таки выщемило. пс "оно" - это Оракл. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 14:59 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
bl_beard Код: plaintext 1. 2. 3. 4. как несложно понять из этого примера парсинг запроса таки произошел и откровенную лажу, типа доступа к полям, которых действительно нет в таблице оно все таки выщемило. Так где парсинг-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 15:49 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
При выполнении DDL оператора (CREATE OR REPLACE) парсинг, безусловно, происходит. Но следующий пример показывает, что даже парсинг анонимного блока не вызывает ошибок, в то время как парсинг отдельного SQL-запроса приводит к ORA-00937: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 16:03 |
|
||
|
Кривой вопрос в пятницу: PL-SQL, групповые функции, статический SQL, Том Кайт
|
|||
|---|---|---|---|
|
#18+
Andrew MaxПри выполнении DDL оператора (CREATE OR REPLACE) парсинг, безусловно, происходит. Но следующий пример показывает, что даже парсинг анонимного блока не вызывает ошибок, в то время как парсинг отдельного SQL-запроса приводит к ORA-00937: ... Не понимаю, в чем может быть разница при парсинге анонимного/хранимого PL-блоков? Для чего этот пример? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 16:16 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=34444001&tid=1886011]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
271ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 616ms |

| 0 / 0 |
