powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Privat Temporary table in PL/SQL WITH Cursor
24 сообщений из 49, страница 2 из 2
Privat Temporary table in PL/SQL WITH Cursor
    #40115320
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous

Начиная с 18с это не так, даже баг специальный по этому поводу закодили :)

спасибо
не знал, проверить не на чем (права забрали)

зы
надо будет еще "ссылку" из другого пакета попробовать
(в древних версиях у меня не работало)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE PACKAGE test1 AS
  TYPE t_tab IS TABLE OF emp.empno%TYPE
    INDEX BY BINARY_INTEGER;
END;


CREATE OR REPLACE PACKAGE test2 AS
  PROCEDURE test;
END;

CREATE OR REPLACE PACKAGE BODY test2 AS

  PROCEDURE test IS
    l_tab1 test1.t_tab;
  BEGIN


.....
stax
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115326
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo

Как все просто через интерфейс)). Только вот в приложение это не запихнуть. Между begin и end. Потому что на этот момент времянка не создана и курсор скажет что такой таблице не существует. В этом то и гемор.


И в чем гемор?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
CREATE OR REPLACE
  PROCEDURE P1
    IS
      V_CUR SYS_REFCURSOR;
      V_DNAME VARCHAR2(10);
      V_ENAME VARCHAR2(10);
    BEGIN
        OPEN V_CUR
          FOR 'SELECT  D.DNAME,
                       E.ENAME
                 FROM  ORA$PTT_TEST_TBL E,
                       DEPT D
                 WHERE D.DEPTNO = E.DEPTNO';
        LOOP
          FETCH V_CUR
            INTO V_DNAME,
                 V_ENAME;
          EXIT WHEN V_CUR%NOTFOUND;
          DBMS_OUTPUT.PUT_LINE(RPAD(V_ENAME,11) || V_DNAME);
        END LOOP;
        CLOSE V_CUR;
END;
/

Procedure created.

SQL> CREATE PRIVATE TEMPORARY TABLE ORA$PTT_TEST_TBL
  2    AS
  3      SELECT  *
  4        FROM  EMP
  5        WHERE JOB = 'CLERK'
  6  /

Table created.

SQL> SET SERVEROUTPUT ON
SQL> EXEC P1
MILLER     ACCOUNTING
SMITH      RESEARCH
ADAMS      RESEARCH
JAMES      SALES

PL/SQL procedure successfully completed.

SQL> DROP TABLE ORA$PTT_TEST_TBL PURGE
  2  /

Table dropped.

SQL> CREATE PRIVATE TEMPORARY TABLE ORA$PTT_TEST_TBL
  2    AS
  3      SELECT  *
  4        FROM  EMP
  5        WHERE JOB = 'SALESMAN'
  6  /

Table created.

SQL> EXEC P1
ALLEN      SALES
WARD       SALES
MARTIN     SALES
TURNER     SALES

PL/SQL procedure successfully completed.

SQL>



SY.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115329
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой
недосмотр

OPEN V_CUR
FOR 'SELECT D.DNAME,

динамика

ps
заполнять тмп ведь тоже надо через динамический

.....
stax
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115334
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
juratorneo
Далее очищается, только вот после этого HWM уже не мдвинешь потому вто выделенные сегменты её сдвинули и tablespace со временем может расти и потом потребует обслуживания.

Немного не так. Не буду вдаваться в детали, но прокомментирую рост тейблспейса и его обслуживание. Во-первых, сам он если и вырастет, то только при соблюдении ряда условий (наличие в нём датафайлов меньше 32 Гб с autoextend on, либо bigfile TS с autoextend on). Соответственно, не добавляете датафайлы с autoextend on - роста не будет.
Во-вторых, если мы говорим о таком небольшом количестве данных, которое помещается в памяти, то о каком росте темпа вообще идёт речь? И наоборот, если требуется много темпа, то как вы собираетесь это в памяти хранить?

Вообще, я неоднократно слышал похожие вопросы от людей, которые привыкли к Информиксу или MSSQL. Но всё-таки все СУБД разные, не стоит пытаться писать под Оракл как под MSSQL, мой вам совет. И это касается не только временных таблиц.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115453
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Уважаемый Stax, с коллекциями беда. Я впринципе не понимаю что это и для чего.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115454
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

Тем не менее всяческие запросы порождают раздувание tempDB и назад оно не сожмется. У себя на работе я постоянно его пересоздаю и делаю alter database дабы перенаправить новые кривые запросы в него. Раздувается до 200 Гб. Можно конечно иначе, но пока обхожусь так.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115805
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А зачем его постоянно пересоздавать, если при вашей рабочей нагрузке происходит стабилизация на 200 Гб?
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115812
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
Stax,

Уважаемый Stax, с коллекциями беда. Я впринципе не понимаю что это и для чего.


oracle pl sql массивы - Пошук Google

для чего? имхо, для удобства

напр реализовали TYPE xxx IS TABLE OF INDEX BY PLS_INTEGER,
некоторым етого оказалось мало, развили добавив INDEX BY VARCHAR2

INDEX BY DATE пока нет

.....
stax
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115944
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PuM256,

А я и не утверждал что стабилизация на 200. Я пока не знаю. Но с нашими запросами он может рости и больше. Просто на 184Гб я решил пересоздать новый.)
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115945
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax
juratorneo
Stax,

Уважаемый Stax, с коллекциями беда. Я впринципе не понимаю что это и для чего.


напр реализовали TYPE xxx IS TABLE OF INDEX BY PLS_INTEGER,
некоторым

.....
stax

TYPE xxx IS TABLE OF INDEX BY varchar(30)
К примеру когда объявляют подобное. То как понять почему 30 байт?? А не больше. Чем руководствоваться??
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115949
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo

К примеру когда объявляют подобное. То как понять почему 30 байт?? А не больше. Чем руководствоваться??

в зависимости от нужд

напр,
краткое название организации в Украине 38
счет 14
IBAN - 29
код валюты - 3

зы
ето из почему у Вас p_6 varchar2( 15 )

.....
stax
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40116374
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY
juratorneo

Как все просто через интерфейс)). Только вот в приложение это не запихнуть. Между begin и end. Потому что на этот момент времянка не создана и курсор скажет что такой таблице не существует. В этом то и гемор.


И в чем гемор?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE OR REPLACE
  PROCEDURE P1
    IS
      V_CUR SYS_REFCURSOR;
      V_DNAME VARCHAR2(10);
      V_ENAME VARCHAR2(10);
    BEGIN
        OPEN V_CUR
          FOR 'SELECT  D.DNAME,
                       E.ENAME
                 FROM  ORA$PTT_TEST_TBL E,
                       DEPT D
                 WHERE D.DEPTNO = E.DEPTNO';
        LOOP
          FETCH V_CUR
            INTO V_DNAME,
                 V_ENAME;
          EXIT WHEN V_CUR%NOTFOUND;
          DBMS_OUTPUT.PUT_LINE(RPAD(V_ENAME,11) || V_DNAME);
        END LOOP;
        CLOSE V_CUR;
END;
/



SY.


Подскажи плз в чем пишешь код ?? В какой программе?? Я про то, что текс хорошо отформатирован. Sql developer даже если и нажать ctrl + F7 вроде, то всё равно так не построит. Я вот на dbForge. Хотя у него есть свои косяки
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40116480
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo

Подскажи плз в чем пишешь код ??


Я "старая школа" и долго работал когда ни GUI ни форматеров не существовало. Посему выработал свой формат и пишу ручками сразу в этом формате.

SY.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40116529
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
Подскажи плз в чем пишешь код ?? В какой программе?? Я про то, что текс хорошо отформатирован. Sql developer даже если и нажать ctrl + F7 вроде, то всё равно так не построит. Я вот на dbForge. Хотя у него есть свои косяки
В sql developer форматтер достаточно гибко настраивается
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40116940
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, может кто объяснит или примером покажет

Если загрузить в коллекцию некие данные. Как потом эту структуру присоединить с помощью join к курсору. И вообще можно ли??? Мне это надо для того, что я не плодил таблицы GLOBAL TEMPORARY для транзита данных. Наверняка есть выход
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40117022
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneoМне это надо для того, что я не плодил таблицы GLOBAL TEMPORARY для транзита данных.

А у тебя что, аллергия на них?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40117030
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
Коллеги, может кто объяснит или примером покажет


чем не подходят примеры из 22401264 ?

ps
приведите пример с GLOBAL TEMPORARY , переделаю с "коллекциями"
без учета 22401398


.....
stax
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40117037
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
Коллеги, может кто объяснит или примером покажет

Если загрузить в коллекцию некие данные. Как потом эту структуру присоединить с помощью join к курсору. И вообще можно ли??? Мне это надо для того, что я не плодил таблицы GLOBAL TEMPORARY для транзита данных. Наверняка есть выход


Уже несколько раз говорилось стоимость disk storage копейки по сравнению со стоимостью memory а ты все туда-же. У тебя есть процесс транзита данных который загоняет скажем 100GB в GLOBAL TEMPORARY. Если ON COMMIT DELETE ROWS то 100GB вернутся в свободное пространство TEMP. Конечно сам размер TEMP не уменьшится. Ну сделаешь ты RESIZE и что? У тебя что транзит данных одноразовый? Если нет то RESIZE потратит время зря и более того следующий транзит данных опять потратит время на увеличение TEMP. Другой вопрос если ON COMMIT PRESERVE ROWS и используется connection pooling. Тогда раньше или позже GLOBAL TEMPORARY в каждой сессии в пуле будет 100GB. В этом случае процесс транзита данных может явно TRUNCATE GTT DROP STORAGE или даже TRUNCATE GTT DROP ALL STORAGE.
Далее - к курсору ничего добавить нельзя. Не путай курсор с join. Пример join с varray:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> select  e.ename,
  2          e.job,
  3          e.sal
  4    from  emp e,
  5          table(sys.OdciNumberList(7654,7788,7900)) c
  6    where e.empno = c.column_value
  7  /

ENAME      JOB              SAL
---------- --------- ----------
MARTIN     SALESMAN        1250
SCOTT      ANALYST         3000
JAMES      CLERK            950

SQL>



Или просто:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> select  e.ename,
  2          e.job,
  3          e.sal
  4    from  emp e,
  5          sys.OdciNumberList(7654,7788,7900) c
  6    where e.empno = c.column_value
  7  /

ENAME      JOB              SAL
---------- --------- ----------
MARTIN     SALESMAN        1250
SCOTT      ANALYST         3000
JAMES      CLERK            950

SQL>



SY.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40117088
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax
juratorneo
Коллеги, может кто объяснит или примером покажет


чем не подходят примеры из 22401264 ?

ps
приведите пример с GLOBAL TEMPORARY , переделаю с "коллекциями"
без учета 22401398


.....
stax


С примером до понедельника. Ушел с работы.
Касаемо того, чем не устроил. Вопрос просто в том, что я его не совсем понял. Как мне данные из курсора передать в коллекцию и потом содержимое коллекции join с другим запраом.
Суть !!
В одном запросе у меня в курсор грузятся некие расчетные данные. Далее мне их необходимо присоединить к другому запросу который на тот момент должен уже видеть те данные. Просто я работал в sql mms и там прекрасно реализована работа с временными таблицами. Select p1, p2, p3 into #TempTable. Всё таблица создана и делай с ней что угодно пока жива сессия. Щас с oracle. Вот и беда. Я не хочу плодить ни лишних таблиц, ни их лишних определений. Короче засорять схему. Отсюда и вопрос как можно еще это провернуть
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40117098
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo

В одном запросе у меня в курсор грузятся некие расчетные данные. Далее мне их необходимо присоединить к другому запросу который на тот момент должен уже видеть те данные. Просто я работал в sql mms и там прекрасно реализована работа с временными таблицами. Select p1, p2, p3 into #TempTable. Всё таблица создана и делай с ней что угодно пока жива сессия. Щас с oracle. Вот и беда. Я не хочу плодить ни лишних таблиц, ни их лишних определений. Короче засорять схему. Отсюда и вопрос как можно еще это провернуть


Забудь про sql mms - совершенно другая философия. Зачем разбивать на куски?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
WITH запрос1 AS (...),
     запрос2 AS (...)
...
     запросN AS (...)
SELECT ...
  FROM  запрос1,...запросN
  WHERE ...



SY.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40117975
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY
juratorneo

В одном запросе у меня в курсор грузятся некие расчетные данные. Далее мне их необходимо присоединить к другому запросу который на тот момент должен уже видеть те данные. Просто я работал в sql mms и там прекрасно реализована работа с временными таблицами. Select p1, p2, p3 into #TempTable. Всё таблица создана и делай с ней что угодно пока жива сессия. Щас с oracle. Вот и беда. Я не хочу плодить ни лишних таблиц, ни их лишних определений. Короче засорять схему. Отсюда и вопрос как можно еще это провернуть


Забудь про sql mms - совершенно другая философия. Зачем разбивать на куски?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
WITH запрос1 AS (...),
     запрос2 AS (...)
...
     запросN AS (...)
SELECT ...
  FROM  запрос1,...запросN
  WHERE ...



SY.


Обобщенные табличные выражения знакомы мне очень хорошо. Подобие Вьюх. Однако как это можно впихнуть в PL/SQL.?? Сори если туплю. Я просто с Oracle 1 год только. Всего понемногу
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40118110
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo

Обобщенные табличные выражения знакомы мне очень хорошо. Подобие Вьюх. Однако как это можно впихнуть в PL/SQL.?? Сори если туплю. Я просто с Oracle 1 год только. Всего понемногу


PL/SQL что и для чего? И почему PL/SQL? Огласи бизнес задачу.

SY.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40118129
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
как это можно впихнуть в PL/SQL.?

Да так и впихнуть...
Код: plsql
1.
2.
3.
4.
5.
for i in (with t as...
select... from t where...
) loop
  ...
end loop;
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40118188
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
juratorneo
как это можно впихнуть в PL/SQL.?

Да так и впихнуть...
Код: plsql
1.
2.
3.
4.
5.
for i in (with t as...
select... from t where...
) loop
  ...
end loop;


Благодарю за подсказку. Попробую.
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Privat Temporary table in PL/SQL WITH Cursor
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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