powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Privat Temporary table in PL/SQL WITH Cursor
49 сообщений из 49, показаны все 2 страниц
Privat Temporary table in PL/SQL WITH Cursor
    #40115111
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые коллеги, добрый день. Помогите понять как использовать временную таблицу по типу Privat в PL/SQL с курсорами.
Есть курсор. Стоит задача после открытия блока begin - наполнить её данными и потом вызвать курсор где она соединяется с другими таблицами. В MANAGEMENT STUDIO всё просто. В ORACLE говорит что таблица не создана. Дело не доходит даже до открытия курсора. Также пробовал через execute immediate. Не получается.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115160
=nomad=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не проще использовать nested-коллекцию?
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115167
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
=nomad=,

Может и проще, но у меня на данный момент нет понимания как это сделать даже примерно.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115170
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) какая структура "временной таблицы"
2) версия oracle?

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

GTT (id_ask number, p_6 varchar2(15), p_9 date, p_11 varchar2(20))


Oracle 19

Структуру курсора нужна ??

В курсоре много join с другими таблицами, а это времянка для расчетов
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115193
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo

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

Структуру курсора нужна ??

нет

в оракле (в старых версиях, в новейших мож и добавили) несколько другой подход к темп таблицам

их надо заранее создавать create ..., на что нужны права

если создавать в процедуре, то вся дальнейшая работа через динамический скл
что часто не очень удобно

Вам можно/надо создать global (private) temporary table и дальше работать с ней как с обычной таблицей

или создать sql обьект create type тмп as table of ... и дальше работать как "nested-коллекцию"

зы
есть еще вариант создавать в пакет е type тмп is table of ... оракля сам создаст sql тип,
но лично мне не нравится такой подход

pss
создать ф-цию, возвращающую нужный тмп набор

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

Структуру курсора нужна ??

нет

в оракле (в старых версиях, в новейших мож и добавили) несколько другой подход к темп таблицам

их надо заранее создавать create ..., на что нужны права

если создавать в процедуре, то вся дальнейшая работа через динамический скл
что часто (мне) не очень удобно

Вам можно/надо создать global (private) temporary table и дальше работать с ней как с обычной таблицей

или создать sql обьект create type тмп as table of ... и дальше работать как "nested-коллекцию"

зы
есть еще вариант создавать в пакет е type тмп is table of ... оракля сам создаст sql тип,
но лично мне не нравится такой подход

pss
создать ф-цию, возвращающую нужный тмп набор

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

Структуру курсора нужна ??

нет

в оракле (в старых версиях, в новейших мож и добавили) несколько другой подход к темп таблицам

их надо заранее создавать create ..., на что нужны права

если создавать в процедуре, то вся дальнейшая работа через динамический скл
что часто не очень удобно

Вам можно/надо создать global (private) temporary table и дальше работать с ней как с обычной таблицей

.....
stax


Именно так я и сделал и все прекрасно работает. Но мне этот вариант не устраивает впринципе. Не хочу плодить лишние таблицы даже если они пустые. И забивать ими tempDB. Другое дело таблица в оперативной памяти на время сессии или транзакции после чего уничтожается.
А что там на счет коллекций??
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115227
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo

Другое дело таблица в оперативной памяти на время сессии или транзакции после чего уничтожается.
А что там на счет коллекций??


так имхо Private Temporary Tables (PTT) какраз в ОП, и уничтожается

с коллекцией нужен пример?

ps
еще один изврат, формировать хмл
и from xml_table()

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

Другое дело таблица в оперативной памяти на время сессии или транзакции после чего уничтожается.
А что там на счет коллекций??


так имхо Private Temporary Tables (PTT) какраз в ОП, и уничтожается

с коллекцией нужен пример?

ps
еще один изврат, формировать хмл
и from xml_table()

.....
stax


Так я ж и говорю что хотел провернуть с таблицами по типу PRIVATE, но с курсором это не работает. Пришлось перейти на GLOBAL. Но с GLOBAL вариант не импонирует по нескольким причинам. )
Пример с коллекцией очень нужен особенно как его подружить с курсорами. В курсор данные подгружаются из одного источника, а для времянки из другого источника где происходит расчет и потом должно как то попадать к данным в курсор
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115242
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create or replace TYPE stax_ask as object(
  id_ask number, p_6 varchar2(15), p_9 date, p_11 varchar2(20)
  );

create or replace type stax_task as table of  stax_ask; 

declare
 v_tt stax_task :=stax_task();
 begin
  v_tt.extend(2);
  v_tt(1):=stax_ask(10,null,null,null);
  v_tt(2):=stax_ask(20,null,null,null);
  for r in (select a.id_ask,d.dname from dept d,table(v_tt) a where d.deptno=a.id_ask) loop
   dbms_output.put_line(r.id_ask||' '||r.dname);
  end loop;
end;

10 ACCOUNTING
20 RESEARCH

Statement processed.



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

Пример с коллекцией очень нужен особенно как его подружить с курсорами. В курсор данные подгружаются из одного источника, а для времянки из другого источника где происходит расчет и потом должно как то попадать к данным в курсор

https://oracle-base.com/articles/12c/using-the-table-operator-with-locally-defined-types-in-plsql-12cr1
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115255
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
juratorneo
Не хочу плодить лишние таблицы даже если они пустые. И забивать ими tempDB. Другое дело таблица в оперативной памяти на время сессии или транзакции после чего уничтожается.

На всякий случай уточню, что данные в GTT как раз и хранятся на время сессии (или даже до коммита, смотря как создадите).
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115263
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PuM256
juratorneo
Не хочу плодить лишние таблицы даже если они пустые. И забивать ими tempDB. Другое дело таблица в оперативной памяти на время сессии или транзакции после чего уничтожается.

На всякий случай уточню, что данные в GTT как раз и хранятся на время сессии (или даже до коммита, смотря как создадите).

У ТС по ходу немеряно оперативки, но нет места под temp tablespace :)
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115278
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo

Есть курсор. Стоит задача после открытия блока begin - наполнить её данными и потом вызвать курсор где она соединяется с другими таблицами. В MANAGEMENT STUDIO всё просто. В ORACLE говорит что таблица не создана. Дело не доходит даже до открытия курсора. Также пробовал через execute immediate. Не получается.


Код: 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.
CREATE PRIVATE TEMPORARY TABLE ORA$PTT_TEST_TBL
  AS
    SELECT  *
      FROM  EMP
/
SET SERVEROUTPUT ON
DECLARE
    CURSOR V_CUR
      IS
    SELECT  D.DNAME,
            E.ENAME
      FROM  ORA$PTT_TEST_TBL E,
            DEPT D
      WHERE D.DEPTNO = E.DEPTNO;
BEGIN
    FOR V_REC IN V_CUR LOOP
      DBMS_OUTPUT.PUT_LINE(RPAD(V_REC.ENAME,11) || V_REC.DNAME);
    END LOOP;
END;
/

SMITH      RESEARCH
ALLEN      SALES
WARD       SALES
JONES      RESEARCH
MARTIN     SALES
BLAKE      SALES
CLARK      ACCOUNTING
SCOTT      RESEARCH
KING       ACCOUNTING
TURNER     SALES
ADAMS      RESEARCH
JAMES      SALES
FORD       RESEARCH
MILLER     ACCOUNTING

PL/SQL procedure successfully completed.

SQL>



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

Пример с коллекцией очень нужен особенно как его подружить с курсорами. В курсор данные подгружаются из одного источника, а для времянки из другого источника где происходит расчет и потом должно как то попадать к данным в курсор

https://oracle-base.com/articles/12c/using-the-table-operator-with-locally-defined-types-in-plsql-12cr1


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

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

На всякий случай уточню, что данные в GTT как раз и хранятся на время сессии (или даже до коммита, смотря как создадите).

Полностью согласен. Разница лишь в том, что PRIVAT создаётся в оперативной памяти с теми же delete или preserve. Но GLOBAL создаётся в temporary tablespace и хранит там свои данные. Далее очищается, только вот после этого HWM уже не мдвинешь потому вто выделенные сегменты её сдвинули и tablespace со временем может расти и потом потребует обслуживания. С PRIVAT всё гораздо лучше.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115296
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY
juratorneo

Есть курсор. Стоит задача после открытия блока begin - наполнить её данными и потом вызвать курсор где она соединяется с другими таблицами. В MANAGEMENT STUDIO всё просто. В ORACLE говорит что таблица не создана. Дело не доходит даже до открытия курсора. Также пробовал через execute immediate. Не получается.


Код: 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.
CREATE PRIVATE TEMPORARY TABLE ORA$PTT_TEST_TBL
  AS
    SELECT  *
      FROM  EMP
/
SET SERVEROUTPUT ON
DECLARE
    CURSOR V_CUR
      IS
    SELECT  D.DNAME,
            E.ENAME
      FROM  ORA$PTT_TEST_TBL E,
            DEPT D
      WHERE D.DEPTNO = E.DEPTNO;
BEGIN
    FOR V_REC IN V_CUR LOOP
      DBMS_OUTPUT.PUT_LINE(RPAD(V_REC.ENAME,11) || V_REC.DNAME);
    END LOOP;
END;
/

SMITH      RESEARCH
ALLEN      SALES
WARD       SALES
JONES      RESEARCH
MARTIN     SALES
BLAKE      SALES
CLARK      ACCOUNTING
SCOTT      RESEARCH
KING       ACCOUNTING
TURNER     SALES
ADAMS      RESEARCH
JAMES      SALES
FORD       RESEARCH
MILLER     ACCOUNTING

PL/SQL procedure successfully completed.

SQL>



SY.


Как все просто через интерфейс)). Только вот в приложение это не запихнуть. Между begin и end. Потому что на этот момент времянка не создана и курсор скажет что такой таблице не существует. В этом то и гемор.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115301
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax
juratorneo,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create or replace TYPE stax_ask as object(
  id_ask number, p_6 varchar2(15), p_9 date, p_11 varchar2(20)
  );

create or replace type stax_task as table of  stax_ask; 

declare
 v_tt stax_task :=stax_task();
 begin
  v_tt.extend(2);
  v_tt(1):=stax_ask(10,null,null,null);
  v_tt(2):=stax_ask(20,null,null,null);
  for r in (select a.id_ask,d.dname from dept d,table(v_tt) a where d.deptno=a.id_ask) loop
   dbms_output.put_line(r.id_ask||' '||r.dname);
  end loop;
end;

10 ACCOUNTING
20 RESEARCH

Statement processed.



.....
stax


Благодарю за помощь. Попытаюсь осмыслить и интерпретировать на своё негодование)
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115302
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
Полностью согласен. Разница лишь в том, что PRIVAT создаётся в оперативной памяти с теми же delete или preserve. Но GLOBAL создаётся в temporary tablespace и хранит там свои данные. Далее очищается, только вот после этого HWM уже не мдвинешь потому вто выделенные сегменты её сдвинули и tablespace со временем может расти и потом потребует обслуживания.

Мда...
Может, все-таки стоит немного подтянуть тему HWM в temp-сегменте?

juratorneo
С PRIVAT всё гораздо лучше.

Ну да, ну да.
ORA-4030 - гораздо лучше, чем пользовать инструменты по предназначению.
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115303
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo

Полностью согласен. Разница лишь в том

как быть с реконнектом?

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

Сколько не пытался я не понимаю что это такое. Ну не понимаю!!


что конкретно не понимаете (какую строку в коде)?

фича ето, что для пакетов sql типы создаются автоматом,
обычно ДБА от них в восторге (SYS_PLSQL_хххххх_ччч_ф)

.....
stax
...
Рейтинг: 0 / 0
Privat Temporary table in PL/SQL WITH Cursor
    #40115315
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
фича ето, что для пакетов sql типы создаются автоматом,
обычно ДБА от них в восторге (SYS_PLSQL_хххххх_ччч_ф

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


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