powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как минимизировать количество обращений к талице?
19 сообщений из 19, страница 1 из 1
Как минимизировать количество обращений к талице?
    #32158162
Bagira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема вот в чем. Есть очень большая таблица. В пакете в нескольких select идет обращение только к нескольким записям из этой большой таблицы, всегда к одним и тем же. Може кто подскажет, как выбрать эти записи в самом начале пакета и потом обращаться постоянно к этой выборке, а не к изначальной таблице. Возможно это?
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158168
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А данные этой выворки совсем не меняются, что-ли?
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158169
Bagira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, во время выполнения пакета данные выборки не меняются
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158171
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опиши PL/SQL таблицу и заполни в секции инициалии. Обращайся к этой таблице ...
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158173
Vladimir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно использовать массив записей и в разделе инициализации тела пакета заполнить его нужными записями.
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158175
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть возможность корректировать запросы и вообще код программ, то можно много вариантов использовать, например сделать временную таблицу Oracle и обращаться к ней. Или сделать просто обычную таблицу (на время).
Если обьём данных не велик - можно в память загнать в PL/SQL таблицу - в пакетах же переменные глобальные - в течении сеанса без проблем.
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158177
Bagira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно использовать эту выборку в From и Where. Разве это возможно с PL/SQL таблицами?
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158179
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158187
Vladimir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда сделай global temporary table или обычную таблицу - это самый простой вариант, которого я всегда пытаюсь избежать. Преимущество - минимум изменений в коде.
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158191
Bagira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда поясните что не так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare
    cursor c1 is select prog, f_date, gruppa, art from price
        where f_date>'01.01.2003' and gruppa is not null;
    type tmpTable is table of c1%ROWTYPE index by binary_integer;
    TmpPrice TmpTable;
    art char ( 100 );
    i number := 1 ;
begin
    open c1;
    loop
        fetch c1 into tmpPrice(i);
        exit when c1%notfound;
        i := i+ 1 ;
    end loop;
    for f in (select dogovor, art from sostav s, tmpPrice t
        where s.art=t.art and s.skidka=t.f_date)
    loop
        dbms_output.put_line(f.dogovor);
    end loop;
end;

На строке for f in (select dogovor, art from sostav s, tmpPrice t выдается ошибка: : (Error): ORA-06550: line 15, column 57: PLS-00201: identifier 'TMPPRICE' must be declared ORA-06550: line 15, column 15: PL/SQL: SQL Statement ignored ORA-06550: line 18, column 30: PLS-00364: loop index variable 'F' use is invalid ORA-06550: line 18, column 9: PL/SQL: Statement ignored
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158206
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Bagira:
Я не говорил, что PL/SQL можно использовать непосредственно в запросе.
Можно создать PL/SQL таблицу в пакете.
Потом создать функцию, которая возвращает данные из этой таблицы.
Использовать можно:
select
*
from
(TABLE( CAST(function_name() AS type_table));
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158209
Bagira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то я сегодня туго соображаю :(
Что должно быть в функции?
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158211
raven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например

type rec_type is record (
p1 number,
p2 number
);
type table_type is table of rec_type index;
tab table_type;

cursor c1 as
select p1, p2 from <Твой селект для нужных данных>
..... раздел описаний

В теле пакета
begin
cnt := 0;
for x in c1 loop
cnt := cnt + 1;
tab.extend();
tab(cnt).p1 := x.p1;
tab(cnt).p2 := x.p2;
end loop;
end;
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158232
Bagira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
raven13, и как потом из tab данные использовать в select from? вопрос то в этом
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158241
Ekuku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если есть постоянный запрос к порции данных из очень большой таблицы, то можно применить несколько стратегий :

1. применить к этой таблице опцию partition. побочный эффект эта опция платная и ее применение автоматич. переводит базу в версию EE, и надо представлять стратегию разбиения на партиции

2. применять обьекты materialized view на commit в этой таблице, тогда в MV будет только нужная порция данных и основная таблица грузится не будет
ограничения те же что в пункте 1
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158256
Bagira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softbuilder, не могли бы Вы поподробнее рассказать про предложенный Вами вариант. Игры с администрированием БД в данном случае не подходят, а сделать очень нужно. Заранее большое спасибо.
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158278
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Bagira:
а версия Oracle какая?
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158281
Bagira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть 8i, есть 9. работать должно и там и там
...
Рейтинг: 0 / 0
Как минимизировать количество обращений к талице?
    #32158297
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай поиск по форуму по слову: GetPagesCursor

Там много информации. Одно дополнение - таблицу надо обьявить в пакете.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как минимизировать количество обращений к талице?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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