2014-08-29 8 views
0

Мне нужен способ временно хранить и использовать несколько значений, возвращаемых из запроса Oracle. В SQL Server я сохранил свои значения в таблице temp, выполнил мою работу, а затем сбросил таблицу. Я обнаружил, что эквивалент Oracle не столь четкий.Временное сохранение нескольких значений в Oracle

Вот пример SQL Server, что я пытаюсь сделать:

select id into #temp from SomeTable where SomeColumn = 'Some Value' 
    : 
(do whatever I need to do with #temp data) 
    : 
drop table #temp 

Я могу закодировать свой путь вокруг SQL Server довольно хорошо, но я почти невежественны, когда дело доходит до синтаксиса Oracle. Я читал разные ссылки Oracle, и они не очень помогли. Я прочитал, что таблицы Oracle temp работают иначе, чем SQL, и часто не рекомендуются.

Я ищу маршрут временного стола, но если есть лучший способ сделать это, который не использует временные таблицы, я все уши. Кто-нибудь знает лучший способ сделать это в Oracle?

Заранее спасибо.

+3

Используйте коллекции. –

+1

Что вы делаете с '# temp' в своей процедуре и почему вы временно материализуете данные? Это повлияет на то, как лучше всего перевести код. См. Например, http://dba.stackexchange.com/questions/34279/temporary-table-inside-procedure-oracle/34322#34322 –

+0

Короче говоря: мне нужно поменять значения в столбце. Например, у меня есть значения SomeValue1 и SomeValue2 в SomeColumn. Мне нужно поменять SomeValue1 на SomeValue2 и наоборот. Мне нужны значения #temp (у меня на самом деле есть два из них), чтобы отслеживать, какие идентификаторы хранят значения. –

ответ

1

Как и во многих вещах, это зависит. Это зависит от того, сколько данных вы будете получать и как вы хотите их использовать. Если у вас слишком много данных для работы («слишком много», о, скажем, более нескольких тысяч строк), и вы хотите манипулировать данными процедурно, то есть в PL/SQL-процедуре или сценарии, AND вы не хотите получать доступ к нему с помощью DML, т. е. вы не хотите говорить что-то вроде SELECT * FROM your_temp_data..., чем загружать данные в коллекцию PL/SQL, как упоминает выше @EgorSkriptunoff, может быть работоспособным решением.

Однако, если временные данные большие (более нескольких тысяч строк) и/или вам нужно сделать что-то вроде SELECT * FROM your_temp_data..., то лучше всего использовать его в глобальных таблицах температуры Oracle. GTT - это таблица, которая используется для хранения данных, которые должны выполняться только в течение одной транзакции или полного сеанса (т. Е. До тех пор, пока вы привязаны к базе данных). Documentation here и here, и еще одна запись на них here.

Делитесь и наслаждайтесь.

Смежные вопросы