powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / временная таблица
15 сообщений из 15, страница 1 из 1
временная таблица
    #32027580
Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поскажите ...
есть ли в Оракле 8 возможность создать временную таблицу состоящую например из двух полей ID1 number и ID2 number
чтобы я после мог выполнить над этой таблицей операции селекта, например? и если "да", то как?
...
Рейтинг: 0 / 0
временная таблица
    #32027590
none
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это уже классика, ну да ладно:
Существеут 2 типа временных таблиц - одна хранит свои записи до завершения транзакции и называеться transaction-specific temporary table. Другая, до завершения сессии (session-specific t.t.). После завершения транзакции/сессии все записи из таблицы автоматически удаляються (ну для второй корректнее будет сказать "транкейтяться"(truncate)). Создаються таблицы так:

-- 1 тип
CREATE GLOBAL TEMPORARY TABLE TempTable
(
D1 NUMBER(10),
D2 NUMBER(10)
)
ON COMMIT DELETE ROWS;

--2 тип
CREATE GLOBAL TEMPORARY TABLE TempTable
(
D1 NUMBER(10),
D2 NUMBER(10)
)
ON COMMIT PRESERVE ROWS;

Об их ограничениях можно почитать в документации, одним из существенных ограничений являеться невозможность создать ссылочную целостность (foreign key). Но это и не нужно.
...
Рейтинг: 0 / 0
временная таблица
    #32027603
Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может быть и классика, но не для тех кто недавно для Оракла пишет

тогда поскажите еще, как эти таблицы создавать внутри процедуры ...
при попытке написать GLOBAL TEMPORARY TABLE TempTable ... внутри блока begin end; получаю ошибку PLS-00103
что я делаю не так?
...
Рейтинг: 0 / 0
временная таблица
    #32027610
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну это уж слишком. Может все-таки почитать чего нибудь, а?

во время компиляции процедуры все объекты должны уже существовать!
что бы этого избежать необходимо использовать execute immediate или пакет DBMS_SQL.
...
Рейтинг: 0 / 0
временная таблица
    #32028110
Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а какие привилегии надо дать пользователю чтобы он мог выполнить EXECUTE IMMEDIATE (изнутри процедуры)?
...
Рейтинг: 0 / 0
временная таблица
    #32028428
Roman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Menja eta tema toze za zivoe zadela. I vot k kakim vyvodam ja prishel.
Esli u tebja Oracle 8 (a ne Oracle 8i ili vyshe), to skoree vsego mozno rasslabit'sja. V Oracle 8 eta kassika (po krainei mere u menja) ne idet. Na Oracle 8i vse zamechatel'no. I v doc-ah horoshee opisanie i rabotaet kak nado.
Mozet eshe kto chego mozet po etomu povodu dobavit'?
...
Рейтинг: 0 / 0
временная таблица
    #32028916
Zaktus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помоему в доке написано, что процедура выполняется от имени создателя, а не от имени пользователя.
...
Рейтинг: 0 / 0
временная таблица
    #32028917
Zaktus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помоему в доке написано, что процедура выполняется от имени создателя, а не от имени пользователя.
...
Рейтинг: 0 / 0
временная таблица
    #32029087
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBMS_SQL, по-моему, уже с 7.3 выполняется от имени того юзверя, кто в тот момент в правах.
По крайней мере, уж точно не от SYS, чей это пакет.
Начиная с 8.0 (?, или только с 8.1, не проверял -- мимо меня 8.0 как-то проскочил),
можно указывать от чьего эффективного имени будет выполняться пакет или процедура: от имени владельца или от имени того, кто её вызвал. А то раньше это всё напоминало юникс, где на всех файлах стоит SUID атрибут .

А зачем вообще извращяться с созданием временной таблицы на ходу??? Создал один раз при разработке схемы и вперёд.
...
Рейтинг: 0 / 0
временная таблица
    #32029144
Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
временная таблица на то и временная что нужна только на определенное врмя для промжуточных вычислений ... она не принадлежит схеме. И потом, зона видимости в пределах коннекта ...
По крайней мере в MSSQL это один из мощнейших и удобных инструментов. А поскольку я пришел с MSSQL то я и стал искать что-либо аналогичное ...
...
Рейтинг: 0 / 0
временная таблица
    #32029343
_VVP_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так используй PL/SQL таблицы.
type TTable is table of [element_type];
При этом element_type может быть определенной пользователем структурой.
Если же тебе надо активно селекать из PL/SQL таблицы и возвращать результат как курсор, то сделай ее как глобальный тип (create type ...) и вперед.
По поводу временных таблиц базы данных, думаю не стоят они того. Дело в том, что хранимые процедуры (функции) могут исполняться в нескольких режимах (зависит от описания): от имени создателя (режим по умолчанию), от имени текущего пользователя или еще как-то. И назначил ты исполнение от имени текущего юзера, а вдруг он не имеет прав на создание таблиц - все, попал. Потом временные таблицы создаются как и постоянные, только в temporary tablespace), а вдруг у тебя админ забыл дать юзеру temp tablespace действительно временный, и попал ты на создание временной таблицы в постоянном tablspace. А может админ не настроил extents во временном табличном пространстве или там лимит у пользователей мал - и все опять попал.
А с таблицами PL/SQL, если их нагружать не сильно много (ну там несколько сотен килобайт), то все будет пучком...
Ну и последнее - не работал я с ними, ничего путного про временные таблицы сказать не могу
))
...
Рейтинг: 0 / 0
временная таблица
    #32029354
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще лучше не использовать эти временные таблицы. Почему-то каждый кто когда-то работал с MSSQL счает необходимым и в Oracle использовать временные таблицы. Я за все свое время работы только однажды использовал временные таблищы, да и то это было давно. А сейчас я бы и тот алгоритм сделал бы без использования таблицы. В Oracle очень богатый SQL и PS/SQL. Я понимаю, что самый короткий путь - это тот который знаешь, но все-таки лучше сначало разобраться с алгоритмом и побольше узнать о возможностях Oracle.
Опиши задание и мы поможем.
...
Рейтинг: 0 / 0
временная таблица
    #32029621
Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, когда создавался топик задача была другая и я ее потом решил другими способами, но после мне опять пришлось как то выкручиваться уже в другой ситуации ...
А проблема такая ... есть весьма большие таблицы содержацие статистику. Мне надо было отобрать по некоторому критерию записи оттуда и потом сджойнить их с выборкой из других таблиц. Так вот по отдельности каждый подзапрос работал замечательно и быстро, но как только я пытался сджойнить получившиеся резалтсеты, то на это уходило порядка получаса (при том что обе выборки были весьма скромные ... не более 3-4 тысяч записей в каждой).
Когда я выгрузил каждую во временную таблицу и проиндексировал их и после чего сджойнил, то работать стало все мгновенно.
Вот отсюда вопрос: как можно без потери производительности сделать тоже самое и без использования временных таблиц.

to nick: Я вполне допускаю что в Оракле существуют мощные инструменты, просто когда сидишь 6 лет под одним сервером, а потом тебе надо срочно начинать писать под другой, то пытаешься использовать старый багаж знаний ... хотя бы на первое время.

Спасибо.
...
Рейтинг: 0 / 0
временная таблица
    #32072785
V Oracle, v otli4ie ot SQL-Servera, vremennaja tablica sama po sebe ne vremenna (belyj negr!) i sozdaetsja odin raz, a vremennye v nej dannye, tak 4to ispol'zovat' ee mo}|{no kak v SQL-Servere, tol'ko sozdavat' ne vnutri procedury, a odin raz v na4ale, kak i postojannye tablicy, t.e. SQL-Serverskie navyki o4en' da}|{e prigodjatsja v Oracle.
...
Рейтинг: 0 / 0
временная таблица
    #32073128
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>А проблема такая ... есть весьма большие таблицы >>содержацие статистику. Мне надо было отобрать по >>некоторому критерию записи оттуда и потом сджойнить >>их с выборкой из других таблиц. Так вот по отдельности >>каждый подзапрос работал замечательно и быстро, но >>как только я пытался сджойнить получившиеся >>резалтсеты, то на это уходило порядка получаса (при >>том что обе выборки были весьма скромные ... не более >>3-4 тысяч записей в каждой).
Сделай нормальные индексы, собери статистику, напиши нормальный запрос (используя PLAN и.т.д)
В 9i есть SQL Analyze который тебе поможет

И главное Oracle умеет обрабатывать сложные запросы
(в отличие от некоторых других СУБД)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / временная таблица
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]