🗊Презентация Временные таблицы Oracle

Категория: Информатика
Нажмите для полного просмотра!
Временные таблицы Oracle, слайд №1Временные таблицы Oracle, слайд №2Временные таблицы Oracle, слайд №3Временные таблицы Oracle, слайд №4Временные таблицы Oracle, слайд №5Временные таблицы Oracle, слайд №6Временные таблицы Oracle, слайд №7Временные таблицы Oracle, слайд №8Временные таблицы Oracle, слайд №9Временные таблицы Oracle, слайд №10Временные таблицы Oracle, слайд №11Временные таблицы Oracle, слайд №12Временные таблицы Oracle, слайд №13Временные таблицы Oracle, слайд №14Временные таблицы Oracle, слайд №15Временные таблицы Oracle, слайд №16Временные таблицы Oracle, слайд №17Временные таблицы Oracle, слайд №18Временные таблицы Oracle, слайд №19Временные таблицы Oracle, слайд №20Временные таблицы Oracle, слайд №21Временные таблицы Oracle, слайд №22Временные таблицы Oracle, слайд №23

Содержание

Вы можете ознакомиться и скачать презентацию на тему Временные таблицы Oracle. Доклад-сообщение содержит 23 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Временные таблицы Oracle
Графеева Н.Г.
2017
Описание слайда:
Временные таблицы Oracle Графеева Н.Г. 2017

Слайд 2





Временные таблицы
Временные таблицы существуют во многих СУБД и предназначены для хранения данных на протяжении сеанса или транзакции. 
Отличительной особенностью этих таблиц является то, что они располагаются во временных сегментах и данные в этих таблицах хранятся только на период сессии или транзакции в зависимости от используемой при их определении опции. 
Они находят широкое применение в качестве промежуточных таблиц при расчётах, отчетах (особенно при промежуточных агрегированиях) и оптимизации сложных запросов.
Описание слайда:
Временные таблицы Временные таблицы существуют во многих СУБД и предназначены для хранения данных на протяжении сеанса или транзакции. Отличительной особенностью этих таблиц является то, что они располагаются во временных сегментах и данные в этих таблицах хранятся только на период сессии или транзакции в зависимости от используемой при их определении опции. Они находят широкое применение в качестве промежуточных таблиц при расчётах, отчетах (особенно при промежуточных агрегированиях) и оптимизации сложных запросов.

Слайд 3





Создание временных таблиц
    CREATE GLOBAL TEMPORARY TABLE
    {ON COMMIT PRESERVE ROWS|
     ON COMMIT DELETE ROWS}
    ON COMMIT PRESERVE ROWS -хранение данных на время сеанса 
    ON COMMIT DELETE ROWS - хранение данных на время транзакции
Описание слайда:
Создание временных таблиц CREATE GLOBAL TEMPORARY TABLE {ON COMMIT PRESERVE ROWS| ON COMMIT DELETE ROWS} ON COMMIT PRESERVE ROWS -хранение данных на время сеанса ON COMMIT DELETE ROWS - хранение данных на время транзакции

Слайд 4





Упражнение 1
В ORACLE APEX выполните следующие команды и объясните результаты:
   ========================================================================
CREATE GLOBAL TEMPORARY TABLE table1 (id NUMBER(5),name VARCHAR2(20))
ON COMMIT PRESERVE ROWS;
========================================================================
INSERT INTO table1 (id,name) VALUES(1,'items1');
========================================================================
SELECT * FROM table1 
========================================================================
DECLARE
    VAR NUMBER;
BEGIN 
   INSERT INTO table1 (id,name) VALUES(1,'items1');
   SELECT COUNT(*) INTO VAR FROM table1;
   DBMS_OUTPUT.PUT_LINE('VAR=' || VAR);
END;
=======================================================================
DECLARE
    VAR NUMBER;
BEGIN 
   INSERT INTO table1 (id,name) VALUES(1,'items1');
   COMMIT;
   SELECT COUNT(*) INTO VAR FROM table1;
   DBMS_OUTPUT.PUT_LINE('VAR=' || VAR);
END;
==========================================================================
Описание слайда:
Упражнение 1 В ORACLE APEX выполните следующие команды и объясните результаты: ======================================================================== CREATE GLOBAL TEMPORARY TABLE table1 (id NUMBER(5),name VARCHAR2(20)) ON COMMIT PRESERVE ROWS; ======================================================================== INSERT INTO table1 (id,name) VALUES(1,'items1'); ======================================================================== SELECT * FROM table1 ======================================================================== DECLARE VAR NUMBER; BEGIN INSERT INTO table1 (id,name) VALUES(1,'items1'); SELECT COUNT(*) INTO VAR FROM table1; DBMS_OUTPUT.PUT_LINE('VAR=' || VAR); END; ======================================================================= DECLARE VAR NUMBER; BEGIN INSERT INTO table1 (id,name) VALUES(1,'items1'); COMMIT; SELECT COUNT(*) INTO VAR FROM table1; DBMS_OUTPUT.PUT_LINE('VAR=' || VAR); END; ==========================================================================

Слайд 5





Упражнение 2
В ORACLE APEX выполните следующие команды и объясните результаты:
 ==========================================================================
CREATE GLOBAL TEMPORARY TABLE table2 (id NUMBER(5),name VARCHAR2(20))
ON COMMIT DELETE ROWS;
=========================================================================
INSERT INTO table2 (id,name) VALUES(1,'items1');
=========================================================================
SELECT * FROM table2 
=========================================================================
DECLARE
    VAR NUMBER;
BEGIN 
   INSERT INTO table2 (id,name) VALUES(1,'items1');
   SELECT COUNT(*) INTO VAR FROM table2;
   DBMS_OUTPUT.PUT_LINE('VAR=' || VAR);
END;
========================================================================
DECLARE
    VAR NUMBER;
BEGIN 
   INSERT INTO table2 (id,name) VALUES(1,'items1');
   COMMIT;
   SELECT COUNT(*) INTO VAR FROM table2;
   DBMS_OUTPUT.PUT_LINE('VAR=' || VAR);
END;
=========================================================================
Описание слайда:
Упражнение 2 В ORACLE APEX выполните следующие команды и объясните результаты: ========================================================================== CREATE GLOBAL TEMPORARY TABLE table2 (id NUMBER(5),name VARCHAR2(20)) ON COMMIT DELETE ROWS; ========================================================================= INSERT INTO table2 (id,name) VALUES(1,'items1'); ========================================================================= SELECT * FROM table2 ========================================================================= DECLARE VAR NUMBER; BEGIN INSERT INTO table2 (id,name) VALUES(1,'items1'); SELECT COUNT(*) INTO VAR FROM table2; DBMS_OUTPUT.PUT_LINE('VAR=' || VAR); END; ======================================================================== DECLARE VAR NUMBER; BEGIN INSERT INTO table2 (id,name) VALUES(1,'items1'); COMMIT; SELECT COUNT(*) INTO VAR FROM table2; DBMS_OUTPUT.PUT_LINE('VAR=' || VAR); END; =========================================================================

Слайд 6





Комментарии… 
Данные из таблицы table2 удалились сразу после завершения транзакции (опция on commit delete rows). 
Отличительной особенностью временных таблицы является то, что данные таблиц не только удаляются, но и не видны из других сеансов. 
Пользователи могут одновременно использовать одну и туже временную таблицу, не пересекаясь данными.
Описание слайда:
Комментарии… Данные из таблицы table2 удалились сразу после завершения транзакции (опция on commit delete rows). Отличительной особенностью временных таблицы является то, что данные таблиц не только удаляются, но и не видны из других сеансов. Пользователи могут одновременно использовать одну и туже временную таблицу, не пересекаясь данными.

Слайд 7





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

Слайд 8





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

Слайд 9





Пример
CREATE GLOBAL TEMPORARY TABLE CITY_DEPT  
                  (
                      DEPTNO NUMBER(2,0),   
                      DNAME VARCHAR2(14),
                CONSTRAINT PK_CITY_DEPT PRIMARY KEY (DEPTNO)       
                    ) 
          ON COMMIT DELETE ROWS;  
================================================================
COMMENT ON COLUMN CITY_DEPT.DEPTNO IS 'DEPARTMENT NUMBER';  
COMMENT ON COLUMN CITY_DEPT.DNAME  IS 'DEPARTMENT NAME'; 
 ================================================================  
CREATE UNIQUE INDEX IDX_DEPTNO_DNAME ON CITY_DEPT (DEPTNO,DNAME) ;  
CREATE INDEX IDX_DNAME   ON CITY_DEPT (DNAME)
===============================================
Описание слайда:
Пример CREATE GLOBAL TEMPORARY TABLE CITY_DEPT   ( DEPTNO NUMBER(2,0),   DNAME VARCHAR2(14), CONSTRAINT PK_CITY_DEPT PRIMARY KEY (DEPTNO)       )      ON COMMIT DELETE ROWS;  ================================================================ COMMENT ON COLUMN CITY_DEPT.DEPTNO IS 'DEPARTMENT NUMBER';  COMMENT ON COLUMN CITY_DEPT.DNAME  IS 'DEPARTMENT NAME';  ================================================================  CREATE UNIQUE INDEX IDX_DEPTNO_DNAME ON CITY_DEPT (DEPTNO,DNAME) ;  CREATE INDEX IDX_DNAME   ON CITY_DEPT (DNAME) ===============================================

Слайд 10





Использование статистики при выполнении запросов к временным таблицам
Cуществует два вида статистики применительно к временным таблицам:
SESSION  - уровня клиентской сессии
SHARED   - разделяемая между клиентскими сессиями
Описание слайда:
Использование статистики при выполнении запросов к временным таблицам Cуществует два вида статистики применительно к временным таблицам: SESSION - уровня клиентской сессии SHARED - разделяемая между клиентскими сессиями

Слайд 11





SESSION и SHARED-статистики
SESSION-статистика собирается и используется только во время текущей клиентской сессии.
Если одновременно существует два вида статистики (SESSION и SHARED), то оптимизатор отдаст предпочтение SESSION-статистике.
SESSION-статистика удаляется как только заканчивается сессия.
SHARED-статистика сохраняется после завершения сессии.
Описание слайда:
SESSION и SHARED-статистики SESSION-статистика собирается и используется только во время текущей клиентской сессии. Если одновременно существует два вида статистики (SESSION и SHARED), то оптимизатор отдаст предпочтение SESSION-статистике. SESSION-статистика удаляется как только заканчивается сессия. SHARED-статистика сохраняется после завершения сессии.

Слайд 12





Какой параметр отвечает за выбранный тип статистики? 
параметр - GLOBAL_TEMP_TABLE_STATS

Как узнать его значение:
SELECT DBMS_STATS.get_prefs('GLOBAL_TEMP_TABLE_STATS')
FROM dual;
Описание слайда:
Какой параметр отвечает за выбранный тип статистики? параметр - GLOBAL_TEMP_TABLE_STATS Как узнать его значение: SELECT DBMS_STATS.get_prefs('GLOBAL_TEMP_TABLE_STATS') FROM dual;

Слайд 13





Упражнение
Уточните в ORACLE APEX тип установленной статистики для временных таблиц.
Описание слайда:
Упражнение Уточните в ORACLE APEX тип установленной статистики для временных таблиц.

Слайд 14





Как изменить тип статистики?
BEGIN 
    DBMS_STATS.set_global_prefs 
    ( pname => 'GLOBAL_TEMP_TABLE_STATS', 
    pvalue => 'SHARED‘); 
END;
 / 
BEGIN 
    DBMS_STATS.set_global_prefs 
    ( pname => 'GLOBAL_TEMP_TABLE_STATS', 
      pvalue => 'SESSION‘ ); 
 END; 
/
    Примечание: выполнение этих операций возможно только при наличии соответствующих привилегий!!
Описание слайда:
Как изменить тип статистики? BEGIN DBMS_STATS.set_global_prefs ( pname => 'GLOBAL_TEMP_TABLE_STATS', pvalue => 'SHARED‘); END; / BEGIN DBMS_STATS.set_global_prefs ( pname => 'GLOBAL_TEMP_TABLE_STATS', pvalue => 'SESSION‘ ); END; / Примечание: выполнение этих операций возможно только при наличии соответствующих привилегий!!

Слайд 15





Как собрать статистику?
DBMS_STATS.gather_table_stats  ('<schema>', '<temporary-table>');
Примечание: вызов процедуры  gather_table_stats доступен простым пользователям APEX!!!
Описание слайда:
Как собрать статистику? DBMS_STATS.gather_table_stats ('<schema>', '<temporary-table>'); Примечание: вызов процедуры gather_table_stats доступен простым пользователям APEX!!!

Слайд 16





Где можно посмотреть собранную статистику?
DBA_TAB_STATISTICS 
DBA_IND_STATISTICS
 DBA_TAB_HISTOGRAMS 
DBA_TAB_COL_STATISTICS 
    Смотреть можно при наличии достаточных административных привилегий…
Описание слайда:
Где можно посмотреть собранную статистику? DBA_TAB_STATISTICS DBA_IND_STATISTICS DBA_TAB_HISTOGRAMS DBA_TAB_COL_STATISTICS Смотреть можно при наличии достаточных административных привилегий…

Слайд 17





Как выглядит весь цикл использования временных таблиц в процедурах и функциях?
BEGIN
     чистим временную таблицу;
     заполняем временную таблицу  данными (как правило,        агрегированными);
      собираем или не сбираем статистику (SESSION /SHARED);
      выбираем данные из временной таблицы;
END
Примечание: при этом в подпрограмме, собирающей данные, должна быть объявлена автономная транзакция!!!
Описание слайда:
Как выглядит весь цикл использования временных таблиц в процедурах и функциях? BEGIN чистим временную таблицу; заполняем временную таблицу данными (как правило, агрегированными); собираем или не сбираем статистику (SESSION /SHARED); выбираем данные из временной таблицы; END Примечание: при этом в подпрограмме, собирающей данные, должна быть объявлена автономная транзакция!!!

Слайд 18





Пример:создание вспомогательных типов
CREATE TYPE t_tf_row AS OBJECT ( id NUMBER, description VARCHAR2(50) );
 / 
CREATE TYPE t_tf_tab IS TABLE OF t_tf_row; 
/
Описание слайда:
Пример:создание вспомогательных типов CREATE TYPE t_tf_row AS OBJECT ( id NUMBER, description VARCHAR2(50) ); / CREATE TYPE t_tf_tab IS TABLE OF t_tf_row; /

Слайд 19





Пример: создание функции, использующей временную таблицу
create or replace function get_tab_ptf(p_rows in number) return t_tf_tab pipelined 
is PRAGMA AUTONOMOUS_TRANSACTION;
begin
     execute immediate('truncate table table1'); --  чистим временную таблицу
     for i in 1..p_rows loop   --  размещаем данные в таблице
        insert into table1(id,name) values(i, 'Description for ' || i);
     end loop;
    dbms_stats.gather_table_stats('GRAFEEVA','TABLE1'); --  собираем статистику
    for rec in (select * from table1) loop  -- формируем результат
          pipe row(t_tf_row(rec.id, rec.name)); 
    end loop;
    return;
end; 
/
Описание слайда:
Пример: создание функции, использующей временную таблицу create or replace function get_tab_ptf(p_rows in number) return t_tf_tab pipelined is PRAGMA AUTONOMOUS_TRANSACTION; begin execute immediate('truncate table table1'); -- чистим временную таблицу for i in 1..p_rows loop -- размещаем данные в таблице insert into table1(id,name) values(i, 'Description for ' || i); end loop; dbms_stats.gather_table_stats('GRAFEEVA','TABLE1'); -- собираем статистику for rec in (select * from table1) loop -- формируем результат pipe row(t_tf_row(rec.id, rec.name)); end loop; return; end; /

Слайд 20





Пример: вызов функции
select * from table(get_tab_ptf(10))
Описание слайда:
Пример: вызов функции select * from table(get_tab_ptf(10))

Слайд 21





Упражнение 
Создайте функцию, которая выдает результат следующего вида на основе таблицы EMP (используйте временные таблицы):
Описание слайда:
Упражнение Создайте функцию, которая выдает результат следующего вида на основе таблицы EMP (используйте временные таблицы):

Слайд 22





Домашнее задание 9(10 баллов)
На основе данных из задания об электроэнергии создайте приложение с аналитическим отчетом о суммарном потреблении электроэнергии за указанные периоды :
Описание слайда:
Домашнее задание 9(10 баллов) На основе данных из задания об электроэнергии создайте приложение с аналитическим отчетом о суммарном потреблении электроэнергии за указанные периоды :

Слайд 23





 
Для формирования промежуточных результатов используйте временные таблицы.   
Результат отправьте по адресу N.Grafeeva@spbu.ru. Тема письма – DB_Application_2017_job9.
    Примечание:задание должно быть отправлено в течение 2 недель. За более позднее отправление будут сниматься штрафные баллы ( по баллу за каждые 2 недели).
Описание слайда:
Для формирования промежуточных результатов используйте временные таблицы. Результат отправьте по адресу N.Grafeeva@spbu.ru. Тема письма – DB_Application_2017_job9. Примечание:задание должно быть отправлено в течение 2 недель. За более позднее отправление будут сниматься штрафные баллы ( по баллу за каждые 2 недели).



Похожие презентации
Mypresentation.ru
Загрузить презентацию