Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 В MSSQL есть select из хр. процедуры, а в Oracle?  [new]
sergB
Member

Откуда:
Сообщений: 1
Есть ли в Оракле аналог наборов данных, возвращаемых из хранимых процедур, как в MSSQL? На сколько я знаю - не было. Может быть в 9-м появилось? Кто-нибудь пробывал сделать прозрачным для клиента общение с MSSQL и Oracle на уровне вызова хранимых процедур через ODBC? Написано уже много для MSSQL, именно с использованием select в хр. процедурах. А заказчик требует возможности работы и с Oracle. Что можно в этом случае предпринять?
24 окт 02, 17:04    [68606]     Ответить | Цитировать Сообщить модератору
 Re: В MSSQL есть select из хр. процедуры, а в Oracle?  [new]
СамСебе
Guest
Уважаемые, вы хоть пару слов оставляйте в ответ. А то не понятно, то-ли никто не знает ответа, то-ли вопрос тупой. Предлагаю, тов. модератору рассмотреть вопрос о каком-нибудь аналоге голосования по вопросу. Типа выбора из фиксированых вариантов: "не знаю/не стоит ответа/глупый вопрос/поконкретнее". Сразу стало бы легче.
28 окт 02, 09:42    [69361]     Ответить | Цитировать Сообщить модератору
 Re: В MSSQL есть select из хр. процедуры, а в Oracle?  [new]
Guest123
Guest
2СамСебе: А чем вам не понравился вопрос?. Нормальный вопрос и смысл понятен. На сам вопрос ответить не могу, т.к. с Ораклом не работал.
Пример. Недавно решил из интереса поизучать Postgres. Все хорошо - да вот только rowset из процедуры не возвращается принципиально, а возвращается только значение (число, строка и.т.п). - ОБЛОМ!!. Незная о таком существенном ограничении можно крупно попасть.
29 окт 02, 09:48    [69764]     Ответить | Цитировать Сообщить модератору
 Re: В MSSQL есть select из хр. процедуры, а в Oracle?  [new]
Серега
Member

Откуда:
Сообщений: 887
2sergB
Да, в Оракле можно возвратить из ХП набор данных, но сделано это не очень удобно (за 9 не говорю не пробовал, вроде иам сделали по другому через прагму пипелайнед (вроде так называется)). В общем случае пробрема решается через пакеты с использованием рефкурсора. В приложении с этим нужно работать не как с запросом, а через компонент типа TStoredProcerure. Если ODBC не является обязательным требованием разработки, то я бы посоветовал от него избавиться в пользу компонент прамого доступа (DOA, ODAC...). Я решал через DOA - все работало, но я сам отказался от этого подхода. Дело в том, что мне не удалось заставить это дело работать в виде
select t1.*,sp.* from table1 t1, st_proc1 sp
where t1.id=sp.id and.....
а без этого (просто возвращаемый набор) мне не интересно.
Если кто покажет как можно сделать (на 8i), буду весьма признателен.
29 окт 02, 10:31    [69794]     Ответить | Цитировать Сообщить модератору
 Re: В MSSQL есть select из хр. процедуры, а в Oracle?  [new]
NNN
Guest
Читай "ORACLE 8: Архитектура", стр. 47.
Короче, есть типы TABLE и VARRAY.
В ХП делаешь
select ... into ...(TABLE и VARRAY type)
В клиенте делаешь
select ... from ... (имя ХР)
29 окт 02, 11:54    [69865]     Ответить | Цитировать Сообщить модератору
 Re: В MSSQL есть select из хр. процедуры, а в Oracle?  [new]
Сергей АБ
Member

Откуда:
Сообщений: 167
2Guest123:
Это я сам себе ответил. А-то обидно, никто ни слова не говорит. Пароль я свой забыл, почта поменялась, в общем по-новой зарегистрировался.
2All:
Весь прикол в том, что нужно заставить клиента работать и с MSSQL и с Oracle. Глупо, конечно, но нужно. Использовать SQL-92 не хочется, т.к. многие мощные средства обоих СУБД остануться за бортом. Вот и хочется унифицировать обращения к БД на уровне вызова хр. процедур. Но беда в том, что написаные для MSSQL процедуры выполняют немалую работу на сервере и в конце-концов возвращают результирующий набор данных клиенту. А как его возвратить из Oracle, хотелось бы у вас спросить. Не хочется переделывать то, что написано для MSSQL, а просто аналогичным образом реализовать хр. процедуры на Oracle. Возможно ли такое?
29 окт 02, 16:22    [70071]     Ответить | Цитировать Сообщить модератору
 Re: В MSSQL есть select из хр. процедуры, а в Oracle?  [new]
DimaR
Member

Откуда:
Сообщений: 1570
Возможно!!!, замучали этим вопросом:)!!!

Один из вриантов:

Create Type Test_Row_Type
As Object (F1 Varchar2(500), F2 Number(17));
Create Type Test_Type Is Table Of Test_Row_Type;

CREATE OR REPLACE function get_test return Test_Type
AS
Test_Tab Test_Type := Test_Type( Test_Row_Type( Null, Null ) );
counter number := 0;
b_First Boolean := TRUE;
Begin
for n in 1..100 loop
If b_First Then
b_First := FALSE;
Else
test_Tab.Extend;
End If;
Test_Tab( Test_Tab.Last ) := Test_Row_Type('Всякая фигня...', n);
end loop;
return Test_Tab;
End;

Select * From Table( Cast( GET_TEST() As Test_Type ) );

Можно еще ref cursor открытые c помощью динамического SQL
Возможно еще как то:)(возвращать plsql таблицы, varray)
30 окт 02, 20:23    [70678]     Ответить | Цитировать Сообщить модератору
 Re: В MSSQL есть select из хр. процедуры, а в Oracle?  [new]
Edw
Member

Откуда:
Сообщений: 16
Погляди ссылочку
http://ln.com.ua/~openxs/projects/oracle/ora011.html
6 ноя 02, 09:08    [72993]     Ответить | Цитировать Сообщить модератору
Все форумы / Сравнение СУБД Ответить