Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Процедура возвращающая содержимое таблицы.


Автор: cromm3 11.8.2007, 14:48
Всем, привет!)) как можно процедурой вернуть содержимое таблици? То есть ни курсор, ни коллекцию, а именно таблицу… чтоб 
Код

select * from testable
 
возвращалось также 
Код
select gettesttable() from dual
 
Спасибо))

Автор: LSD 11.8.2007, 22:15
Во втором запросе функция gettesttable() должна вернуть скаляр, а вовсе не таблицу.

Автор: cromm3 11.8.2007, 22:52
Хм)) вообще то да...))) а как тогда вернуть таблицу?

Автор: Sqlninja 11.8.2007, 23:29
в oracle типа данных "таблица" нет, зато есть коллекции и курсоры, которые можно вернуть.  юзать, смотря какая должна быть структура у возвращаемой таблицы.

Автор: cromm3 11.8.2007, 23:41
Значит нельзя((... эх... в sql server можно вернуть таблицу хранимкой...

Автор: LSD 12.8.2007, 11:52
1. не стоит напрямую переносить приемы работы с SQL Server на Oracle, ничего хорошего из этого не выйдет. Тут другая идеалогия.
2. что такого можно сделать в SQL Server, чего нельзя в Oracle? drop или alter этой таблицы можно сделать?

Автор: cromm3 12.8.2007, 15:07
1)уже осознал, что это действительно так...
2)drop или alter конечно можно)) просто чуть по-другому работают процедуры, вот и всё...

Автор: DimW 13.8.2007, 06:49
Цитата(cromm3 @  11.8.2007,  14:48 Найти цитируемый пост)
как можно процедурой вернуть содержимое таблици?

здесь написано:
http://www.sql.ru/faq/faq_topic.aspx?fid=221
http://www.sql.ru/faq/faq_topic.aspx?fid=537

а лучше сначало понять нужно ли тебе это...!?

Автор: LSD 13.8.2007, 11:52
DimW, он же написал:
Цитата(cromm3 @  11.8.2007,  15:48 Найти цитируемый пост)
То есть ни курсор, ни коллекцию, а именно таблицу

Автор: DimW 13.8.2007, 14:45
Цитата(LSD @  13.8.2007,  11:52 Найти цитируемый пост)
DimW, он же написал:

Цитата(cromm3 @  11.8.2007,  15:48 )
То есть ни курсор, ни коллекцию, а именно таблицу


имхо то что ему надо и те примеры которые я привел это одни и те же вещи, просто каждый говорит о них по разному ибо
Цитата(LSD @  12.8.2007,  11:52 Найти цитируемый пост)
Тут другая идеалогия.


в итоге все равно нужно получить набор данных, автор поправьте если я не прав.

Цитата(cromm3 @  11.8.2007,  23:41 Найти цитируемый пост)
в sql server можно вернуть таблицу хранимкой... 

что вы имеете ввиду говоря "вернуть таблицу"? вернуть данные из таблицы - это понятно, а вернуть таблицу очень слабо я себе представляю это, ведь таблица это объект БД, во что его вернуть, как потом к нему обращаться?

Автор: LSD 13.8.2007, 15:53
Цитата(DimW @  13.8.2007,  15:45 Найти цитируемый пост)
имхо то что ему надо и те примеры которые я привел это одни и те же вещи, просто каждый говорит о них по разному ибо

Думаю он сам лучше знает, что ему нужно smile 
И раз он написал что ни курсор, ни коллекция его не устраивают, то значит как минимум он про эту возможность знает. Понятно, что ему надо как-то по другому проектировать приложение. Но раз он не говорит, что ему надо в итоге получить, то и незачем фантазировать на эту тему. Может там действительно нельзя обойтись курсором или коллекцией.

Автор: cromm3 13.8.2007, 15:56
Цитата

DimW, он же написал:

Цитата(cromm3 @  11.8.2007,  15:48 )
То есть ни курсор, ни коллекцию, а именно таблицу 

имхо то что ему надо и те примеры которые я привел это одни и те же вещи, просто каждый говорит о них по разному ибо

Цитата(LSD @  12.8.2007,  11:52 ) 
Тут другая идеалогия. 

в итоге все равно нужно получить набор данных, автор поправьте если я не прав.


Да, нужен был именно набор данных… примеры отличные! Спасибо! Очень помогли…

Цитата

Цитата(cromm3 @  11.8.2007,  23:41 ) 
в sql server можно вернуть таблицу хранимкой...  


что вы имеете ввиду говоря "вернуть таблицу"? вернуть данные из таблицы - это понятно, а вернуть таблицу очень слабо я себе представляю это, ведь таблица это объект БД, во что его вернуть, как потом к нему обращаться?


Конечно, вернуть данные, вернуть таблицу как объект - эт дикость какая-то)) хотя интересно))

Добавлено через 3 минуты и 46 секунд
LSD, а там во втором примерчеки именно таблицей возвращается… 

Вообще, на самом деле спасибо)) много познавательного узнал))

Автор: DimW 14.8.2007, 08:14
Цитата(LSD @  13.8.2007,  15:53 Найти цитируемый пост)
И раз он написал что ни курсор, ни коллекция его не устраивают


LSD, я незнаю ни одного способа выполнения DML, select, при котором не формировался бы курсор. По этому с этим все ясно: 
Цитата(cromm3 @  11.8.2007,  14:48 Найти цитируемый пост)
как можно процедурой вернуть содержимое таблици?

а вот эта часть вопроса:

Цитата(cromm3 @  11.8.2007,  14:48 Найти цитируемый пост)
То есть ни курсор, ни коллекцию, а именно таблицу

делает выполнение задачи невозможной.



Цитата(cromm3 @  13.8.2007,  15:56 Найти цитируемый пост)
Да, нужен был именно набор данных… примеры отличные! Спасибо! Очень помогли…
 Пожалуйста, заходите еще, а то последнее время скучновато стало в этой ветке :(


Автор: LSD 15.8.2007, 14:41
Цитата(cromm3 @  13.8.2007,  16:56 Найти цитируемый пост)
LSD, а там во втором примерчеки именно таблицей возвращается…

Это не таблица.

Автор: cromm3 15.8.2007, 23:25
Цитата

Это не таблица. 


а как это по научному, называется? Просто, я реально слаб в терминологии... ))

Автор: LSD 16.8.2007, 16:23
Цитата
Table functions are functions that produce a collection of rows (either a nested table or a varray) that can be queried like a physical database table or assigned to a PL/SQL collection variable. You can use a table function like the name of a database table, in the FROM clause of a query, or like a column name in the SELECT list of a query.

A table function can take a collection of rows as input. An input collection parameter can be either a collection type (such as a VARRAY or a PL/SQL table) or a REF CURSOR.


Т.е. все таки таблица - это объект базы данных, а функция возвращает коллекцию строк (я потому и спрашивал про, то что можно делать в SQL Server с возвращаемой таблицей).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)