четверг, 21 января 2016 г.

Особенности сравнения таблиц из записей %ROWTYPE

Имеем таблицы в двух схемах
create table MESSAGE
(
  message_id        INTEGER not null,
  message_code   VARCHAR2(128) not null,
  message_name  NVARCHAR2(256) not null,
  message_type   VARCHAR2(128) not null,
  message_level   INTEGER not null,
);

И процедуру сравнения содержимого в двух схемах
DECLARE
  TYPE t_m_tbl    IS TABLE OF message%ROWTYPE INDEX BY BINARY_INTEGER;
  v_sql1         CLOB;
  v_sql2         CLOB;
  v_cur1         SYS_REFCURSOR;
  v_cur2         SYS_REFCURSOR;

  v_m_tbl1       t_m_tbl;
  v_m_tbl2       t_m_tbl;
BEGIN
  v_sql1  := 'SELECT t.*
                FROM schema1.message t
              ORDER BY t.message_code';
  v_sql2  := 'SELECT t.*
                FROM schema2.message t
              ORDER BY t.message_code';          
  OPEN v_cur1 FOR v_sql1;
  FETCH v_cur1 BULK COLLECT INTO v_m_tbl1;
 
  OPEN v_cur2 FOR v_sql2;
  FETCH v_cur2 BULK COLLECT INTO v_m_tbl2;

  IF v_m_tbl1.count >0 THEN
    FOR prc_m1 IN v_m_tbl1.first..v_m_tbl1.last LOOP
    .................
    END LOOP;
  END IF;
END;

Если таблицы в разных схемах будут иметь одинаковую структуру но разную последовательность полей то получим ошибку не совместимости типов в строке
  FETCH v_cur1 BULK COLLECT INTO v_m_tbl1;
или
  FETCH v_cur2 BULK COLLECT INTO v_m_tbl2;

проблема решается явным перечислением полей в запросе
вместо t.* указать
t.message_id,
t.message_code,
t.message_name,
t.message_type,
t.message_level



пятница, 24 апреля 2015 г.

ошибка ORA-00604: error occurred at recursive SQL level 1 возникающая при создании PLUGGABLE DATABASE

При создании PLUGGABLE DATABASE командой

CREATE PLUGGABLE DATABASE PDBTest
  ADMIN USER user1 IDENTIFIED BY user1
  ROLES = (connect,dba)
  DEFAULT TABLESPACE users
  file_name_convert = ('+DATA/MYSERVER/A587A94B8C72405CB40663EF8F521E9E/DATAFILE/system.271.876592207', 'C:\ORACLE\ORADATA\MYSERVER\PDBTest\system.271'
                      ,'+DATA/MYSERVER/A587A94B8C72405CB40663EF8F521E9E/DATAFILE/sysaux.270.876592197','C:\ORACLE\ORADATA\MYSERVER\PDBTest\sysaux.270'
                      ,'+DATA/MYSERVER/A587A94B8C72405CB40663EF8F521E9E/DATAFILE/users.269.876592195','C:\ORACLE\ORADATA\MYSERVER\PDBTest\users.269'
                      ,'+DATA/MYSERVER/A587A94B8C72405CB40663EF8F521E9E/TEMPFILE/temp.286.876595197','C:\ORACLE\ORADATA\MYSERVER\PDBTest\temp.286')
  STORAGE (MAXSIZE 100G MAX_SHARED_TEMP_SIZE 100M)
  TEMPFILE REUSE
  PATH_PREFIX = '+DATA';  

при наличии табличного пространства users  в шаблоне pluggable database pdb$seed
возникает ошибка ORA-00604: error occurred at recursive SQL level 1

решением в данной ситуации является создание  контейнерной базы с пользователем без назначения ему табличного пространства по умолчанию
без параметров   DEFAULT TABLESPACE users

и установке табличного пространства по умолчанию позже командами

ALTER PLUGGABLE DATABASE PDBTest OPEN;
alter session set container=PDBTest;
ALTER USER user1 DEFAULT TABLESPACE users;



вторник, 17 сентября 2013 г.

Краткий интерактивный обзор Oracle Database 12C

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/poster/OUTPUT_poster/poster.html#tab_1

пятница, 13 сентября 2013 г.

Уязвимость в системе безопасности при выдаче привилегии GRANT SELECT на таблицу

При выдаче привилегии GRANT SELECT на таблицу пользователь другой схемы данных поличивший привилегию кроме возможности чтения данных получает неявно возможность заблокировать данные командой select for update.

четверг, 12 сентября 2013 г.

Некоторые новые возможности в базе 12C

1.Наконец появился синтаксис для страничной выборки данных.
Синтаксис таков.
o53asktom-f1

 Пример выборки пяти первых записей.

SQL> create table t
  2  as
  3  select * from all_objects;
Table created.

SQL> create index t_idx 
on t(owner,object_name);
Index created.

SQL> select owner, object_name, object_id
  2    from t
  3   order by owner, object_name
  4   FETCH FIRST 5 ROWS ONLY;
…
——————————————————————————————————————————————————————————————————————————————
| Id |Operation                     | Name|Rows  |Bytes |Cost (%CPU)|Time    |
——————————————————————————————————————————————————————————————————————————————
|   0|SELECT STATEMENT              |     |    5 | 1450 |    7   (0)|00:00:01|
|*  1| VIEW                         |     |    5 | 1450 |    7   (0)|00:00:01|
|*  2|  WINDOW NOSORT STOPKEY       |     |    5 |  180 |    7   (0)|00:00:01|
|   3|   TABLE ACCESS BY INDEX ROWID|T    |87310 | 3069K|    7   (0)|00:00:01|
|   4|    INDEX FULL SCAN           |T_IDX|    5 |      |    3   (0)|00:00:01|
——————————————————————————————————————————————————————————————————————————————

Predicate Information (identified by operation id):
—————————————————————————————————————————————————————————————————

1 - filter("from$_subquery$_003"."rowlimit_$$_rownumber"<=5)
2 - filter(ROW_NUMBER() OVER ( ORDER BY "OWNER","OBJECT_NAME")<=5)

Пример выборки пяти записей начиная с пятой.


SQL> select owner, object_name, object_id
  2    from t
  3   order by owner, object_name
  4   OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;


2. Поля SQL VARCHAR2, NVARCHAR2 теперь могут хранить до 32Кб значений.
3. В сотни раз по сравнению с 11G увеличена производительность команды добавления колонки со значением по умолчанию.

SQL> alter table t 
add (data char(2000) default 'DEFAULT VALUE');

4. Добавлено ключевое слово DEFAULT для вставки значения по умолчанию в командах INSERT/UPDATE 

SQL> create table test_table
  2  ( id int
  3      generated by default
  4          as identity
  5          ( start with 33
  6            increment by 10 )
  7          primary key,
  8    val varchar2(100)
  9  )
 10  /
Table created. 
SQL>  insert into test_table (id, … ) 
   values ( DEFAULT, … );
Вставляет значение по умолчанию 33 из последовательности.
SQL>  insert into test_table (id, … ) 
   values ( 10, … );

вставляет значение 10.

четверг, 16 августа 2012 г.

Apex Listener 2.0 Beta доступен для изучения

Apex Listener 2.0 Beta доступен для изучения и скачивания.

Изменения относительно версии  1.1.4

Поддержка нескольких соединений с базой данных.
Утилита командной строки.
Изменение структуры файла конфигурации.
А также:
Moved storage of RESTful Services (aka Resource Templates) to the Oracle Application Express Schema
Design and creation of RESTful Services is now done using Oracle Application Express
Graphical administration of Oracle Application Express Listener is now done using Oracle SQL Developer
RESTful Services are now protected via the OAuth2 Protocol.