|
Проблема с числовыми параметрами
|
|||
---|---|---|---|
#18+
Есть тут у меня запрос типа такого: select * from stores where id in (1, 2, 3) и нужно в этот запрос параметр передавать, типа : select * from stores where id in (:store) если :store=1 , то все нормально, но если :store=1,2 то ругается оракл 01722 Invalid number .... Если сначала формировать строку запроса (stmt_str:='select * from stores where id in ('||store_id||')' ), а потом ее открывать (OPEN c FOR stmt_str ), всё работает. Но это в процедуре или в функции, но мне нужен просто запрос... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2002, 08:44 |
|
Проблема с числовыми параметрами
|
|||
---|---|---|---|
#18+
Интересно, мне понравилась задачка:) Насколько знаю, параметра-массива в Оракле нет, так что на ум приходит либо предварительное наполнение pl/sql-таблицы нужными параметрами и переделка запроса для работы с ней (но это м.б. неоптимально по скорости выполнения), либа шаманство с динамическим sql со всеми вытекающими. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2002, 10:25 |
|
Проблема с числовыми параметрами
|
|||
---|---|---|---|
#18+
А воспользоваться Macro (&store) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2002, 10:48 |
|
Проблема с числовыми параметрами
|
|||
---|---|---|---|
#18+
2 MW: Я использую FastReport, в нем и выполняется запрос. Macro (&store) не переваривается. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2002, 10:57 |
|
Проблема с числовыми параметрами
|
|||
---|---|---|---|
#18+
Да и парситься будет каждый раз...Хотя, если этот запрос будет выполняться достаточно редко, то почему бы и строкой не передавать ? Соорудите функцию на клиенте, которая из кучки чисел делает одну строку с этими числами через запятую.Только если запрос частый, то неэффективно если строка будет очень длинная (десятки кило)то ... кирдык :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2002, 11:11 |
|
Проблема с числовыми параметрами
|
|||
---|---|---|---|
#18+
2 ora600: Да у меня и так кучка чисел передается в запрос как строка с этими числами через запятую. Но оракл не переваривает эту строку, говорит, что неправильное число. Наверное, при разборе он смотрит, что в конструкции where id in (:store) , т.к. id - number, то и :store должен быть number. А строчку типа '1, 2, 3' к числу ему сложно преобразовать... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2002, 11:35 |
|
Проблема с числовыми параметрами
|
|||
---|---|---|---|
#18+
Вместо :store надо '||<строка>||' или как там в FastRep, не знаю... т.е. селект и числа через запятую должны составлять единую строку. И апострофы случайно туда не поставьте ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2002, 11:52 |
|
Проблема с числовыми параметрами
|
|||
---|---|---|---|
#18+
В параметр :store не удастся впихнуть ничего кроме одного значения!!! (одного числа, одной строки) 2Виктор: Конструкция where id in (&store) прекрасно понимается Ораклом. Посмотри в описание запроса для FastReport там наврняка должно быть что-то про макросы. Как например в ODAC можно для запроса использовать метод MacroByName( 'store' )... И згнать туда то что нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2002, 12:36 |
|
Проблема с числовыми параметрами
|
|||
---|---|---|---|
#18+
Вот, наизвращался. Только все это работает на Oracle 9.2, как это делать на дболее ранних версиях- не знаю: Код: 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.
А теперь собственно метод работы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Так и работаешь: перед запросом очищаешь список параметров, набиваешь его нужными и вперед. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2002, 15:03 |
|
Проблема с числовыми параметрами
|
|||
---|---|---|---|
#18+
Да, много версий :-) Но вопрос то стоял фактически так: Возможно ли, используя только SQL, без создания процедур и функций , реализовать сабж. С помощью процедур и функций плюс динамический sql это у меня давно решено, в общем-то. Но неужели нельзя это решить каким-нить простым способом? А насчет Macro (&store) - я знаю, что это такое, и как это использовать. Но! Это ODAC, и в хелпе к нему вот что написано: ODAC replaces all macro names with their values and sends SQL statement to Oracle when SQL execution is requested. Ну а frQuery в FR не понимает, что это такое (вот мысль появилась, мобыть сделать frQuery = class(TOraQuery) и т.п...). Но опять же - Но неужели нельзя это решить каким-нить простым способом? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2002, 05:48 |
|
Проблема с числовыми параметрами
|
|||
---|---|---|---|
#18+
Возможно ли, используя только SQL, без создания процедур и функций, реализовать сабж. Возможно. Но неужели нельзя это решить каким-нить простым способом? А вот простым нет. Можно извратится. Если числа в массиве a[], на клиенте пишем Код: plaintext 1. 2. 3.
А в запросе соответственно Код: plaintext 1. 2.
Но кому это надо... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2002, 09:21 |
|
|
start [/forum/topic.php?fid=52&fpage=2838&tid=1992954]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 135ms |
0 / 0 |