| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Oracle > Запрос с параметрами |
| Автор: MasterOfCode 7.4.2010, 13:11 | ||
| Добрый день всем. Хочу увидеть результат в виде таблицы. Делаю так:
Ругается, просит into вставить, а мне незачем однострочный ответ. Вопрос, как делать правильно? |
| Автор: azesmcar 7.4.2010, 13:13 |
| создай процедуру и возвращай в курсор. |
| Автор: MasterOfCode 7.4.2010, 13:15 |
И что, приходится всегда так извращаться с курсорами? В MS SQL с этим намного проще. |
| Автор: azesmcar 7.4.2010, 13:16 |
Почему извращаться? Это так и делается. |
| Автор: MasterOfCode 7.4.2010, 13:18 |
Потому что чтоб написать обычную процедуру, необходимо создавать курсор, его заполнять и выводить. Неужели нельзя сделать проще? |
| Автор: azesmcar 7.4.2010, 13:21 |
| я просто не понимаю чего тут сложного, написание open cursor как-то усложняет работу? По мне так нормально. |
| Автор: azesmcar 7.4.2010, 13:46 | ||
ну и что тут сложного? код может быть не рабочим, писал тут и на память, нет оракла под рукой. |
| Автор: DimW 7.4.2010, 15:28 | ||
MasterOfCode, для того что бы написать запрос с параметрами не требуется писать процедурный код:
обратите внимание на двоеточие. соответственно передавать значения в эти параметры будете средствами вашего инструмента или библиотек котрые используете для работы с оракл. |
| Автор: azesmcar 7.4.2010, 15:39 |
| DimW Да конечно, но я думаю запросы в любом случае лучше писать в процедурах и возвращать через курсор так как 1. В случае вызова запроса извне он становится динамическим, а значит тратится дополнительное время на компиляцию. 2. Так нагляднее выглядит - передал аргументы и получил результат. 3. Код становится чище и аккуратнее, если в нем вместо огромных запросов стоит вызов процедуры. 4. Код легче отлаживать и проверять, запустил процедуру в PL/SQL, проверил результат и не надо запускать саму программу и делать dump запроса, чтобы посмотреть что там получилось. Я так думаю © |
| Автор: DimW 7.4.2010, 16:27 | ||||||||
утверждение не верно. полный разбор: - синтаксический разбор; - морфологический разбор; - определение наиболее оптимального плана выполнения запроса; (самая дорогая операция при разборе запроса) частичный разбор: - синтаксический разбор; - морфологический разбор; если морфология идентична при повторном выполнении запроса, то подбор плана сервер не делает т.к. он уже для него есть. если ты действительно значения в запрос добавляешь динамически(не используя переменные привязки), то оракл всегда будет выполнять полный разбор.
спорить не буду дело вкуса просто новечку в оракл лучше знать о простом способе. Добавлено @ 16:32 к стати при таком варианте:
в действительности запрос керируемый ораклом будет выглядеть примерно так:
делается это для того что бы избежать ситуаци когда используя этот же запрос, программист использует другие переменные (к примеру start_date, end_date), тем самым избежать полного разбора. |
| Автор: azesmcar 7.4.2010, 16:33 | ||
Не знал что он кеширует..раньше вроде не делал. |
| Автор: DimW 7.4.2010, 16:38 |
я оракл начал изучать с 8 версии, там уже все было в порядке. если интересно можете посмотреть вьюху v$sql. |
| Автор: azesmcar 7.4.2010, 16:40 |
я тоже начал работу с 8-ки..тогда прочел о предпочтительности процедур обычным запросам в какой-то книге..давно это было, может книга старая была а может просто книга по базам данных а это было написано в виде общей рекомендации..не помню уже, 8 лет назад было. |
| Автор: DimW 7.4.2010, 16:50 |
да, давненько. сам уже почти год не шерстил концепт по новым версиям, по этому сейчас на 11G R2 пишу так же как и под 9i, в принципе необламываюсь, но понимаю что не хорошо это |
| Автор: azesmcar 7.4.2010, 16:54 |
| Да, это я тогда только на работу поступил и сразу Oracle -ом по башке Так что это было мое первое знакомство с базами данных, 2 года там проработал и после этого как-то сменил профиль, серьезно базами уже не занимаюсь, вот никак не нахожу повода прочитать чего нибудь современного и серьезного. |
| Автор: Zloxa 8.4.2010, 09:14 | ||
не правда ли мутный пример? Он ничего не показывает. Откуда Вы вызваете эот скрипт? С клиента? Почему бы здесь сразу не использовать связанные пременные(параметры)? Или же это sql скрипт, который выполняется неким шеллом? Для оракла штатным шеллом является sqlplus, а он поддерживает и макросы и и переменные:
Мне думается что следует понимать, что для Оракла не работает абсолютное большинство бест практис MS SQL, ровно как и наоборот. Может расскажете что конкретно Вы пытаетесь сделать, вместо того, чтобы рассказывать как вы всегда это делали в MS SQL и показывать бессмысленные примеры, а мы постараемся Вам рассказать как это делается в Оракле? |
| Автор: Zloxa 8.4.2010, 09:51 |
Про то что п1- чушь уже написали. еще пару пунктов добавлю, с моей точки зрения куда более значимых: - хранение запроса на стороне сервера имеет те же преимущества что и ранне связывание против позднего. В случае изменения схемы данных мы получим ошибку компиляции а не времени выполнения. - хранение текста запроса на стороне сервера позволяет менять его текст, не перекомпилируя приложение. А поменять текст может понадобится... ну например хинт подставить.... |
| Автор: MasterOfCode 8.4.2010, 10:35 | ||||
я пытался сделать так, как я привык. просто набор запросов. нажав на "execute", в PL/SQL Developer чтоб начались выполнятся поочередно скрипты и в результате получить таблицу. вот и все, собственно. Поскольку у меня в нескольких запросах, используются одинаковые периоды времени, необходимо один раз подправить вначале и везде автоматом сменится. пример:
Писал от руки, возможно где то ошибся. |
| Автор: Zloxa 8.4.2010, 11:31 | ||
Command window PL/SQL девелопера эмулирует некоторые команды sqlplus'а
|