![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Wanderer2019 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: нет Всего: 17 |
Всем привет,
народ, подскажите пожалуйста. С Oracle имею дело впервые. Необходимо написать хранимую процедуру или функцию, которая возвращала бы набор данных, для последующей обработки под .NET. Насколько я понял в оракле нельзя просто написать SELECT в хранимой процедуре и вернуть rowset. Можно бегать курсором или описывать табличные типы данных? правильно? Может есть у кого простенький пример подобной процедуры - типа SELECT * FROM MyTable. Google выдает всего очень много а по существу все очень закручено, так что быстро не разобраться. ![]() |
|||
|
||||
defmzk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 16.7.2009 Репутация: нет Всего: нет |
я как понял типа вот этого?
|
|||
|
||||
Gudinya |
|
|||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.2.2008 Репутация: 5 Всего: 8 |
самый простой вариант
|
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
Wanderer2019
Посмотри rowtype и курсоры.
что-то вроде этого. Если нужна процедура - используй out аргументы. Это сообщение отредактировал(а) azesmcar - 24.7.2009, 12:06 |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
||||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
Объясните зачем Вам нужно "SELECT * FROM MyTable" засовывать в процедуру. Не удовлетворит ли Вас просто вьюха?
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Wanderer2019 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: нет Всего: 17 |
Всем спасибо!
Буду пробовать. Zloxa, мне ж из кода нужно возвращать большой набор данных. Писать запрос в теле фунции (.NET) я не хочу. Добавлено через 14 минут и 12 секунд Gudinya, А как в запросе Oracle вызвать эту функцию? и чем функция предпочтительней к хранимой процедуре? |
|||
|
||||
Gudinya |
|
||||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.2.2008 Репутация: 5 Всего: 8 |
ну эту функцию я как пример предложил
если вы хотите ее использовать для возвращения набора данных типа
то использование курсора не самый удачный пример (лучше возвращать набор данных на основе типа) если вы хотите использовать функцию ввиде
то в данном случае функция не должна возвращать набор данных Функция не лучше и не хуже хранимой процедуры, все зависит от того что требуется. |
||||
|
|||||
DimW |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
в результе получите набор данных. предпочтительней тогда когда требуется вернуть несколько наборов данных, т.е. обьявив несколько out параметров вы можете в них передать несколько наборов:
вызывать так:
Добавлено через 4 минуты и 23 секунды и всетаки поясните почему вам требуется именно проседура, чем вьюха не устраивает? ибо вьюха вам даст тот же функционал что вы и хотели.
отличаться будут только вызовы. |
||||||||
|
|||||||||
Wanderer2019 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: нет Всего: 17 |
это типа этого:
но, чтобы например дописать какой нибудь JOIN. Что мне делать? Руками склеивать каждую строчку таблицы A со строкой таблицы B???? Добавлено через 6 минут и 1 секунду
Ведь чтобы вернуть значения из View - необходимо делать запрос. Запрос из кода типа SELECT * FROM myView будет работать быстрее чем вызов хранимой процедуры/функции с возвратом набора строк? |
||||
|
|||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
Даже если быстрее, то не значительно. С вьюхой можно джойниться ЗЫ Вы видимо привыкли использовать MS SQL. Многие бест практис для MS SQL в Оракле - пур практис. И наоборот. Это сообщение отредактировал(а) Zloxa - 24.7.2009, 12:42 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
вы на вопрос так и не ответили. понимаете я не настаиваю на использовании вьюхи, просто нужно понять какой вариант для вас будет предпочтительней, в сложившийся ситуации. обычно возврат набора данных перекладывают на плечи процедур в том случае когда требуемый набор сложно или невозможно посчитать запросом, или требуется выполнить динамический SQL. в вашем случае этого я не увидел. если всетаки Zloxa прав и вы пытаетесь разрабатовоть в оракле так как вы привыкли это делать в другой СУБД, то саветую пересмотреть подход. это касается не только оракла, это проблема "переезда" с любой СУБД на любую. |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
Я не могу понять этого. ПОЧЕМУ? Если язык запросов для того и разрабатывался, чтобы его использовать из приложения. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Gudinya |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.2.2008 Репутация: 5 Всего: 8 |
Что то типа...
опять же самый простой вариант
|
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Oracle" | |
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Oracle | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |