четверг, 14 мая 2020 г.

Oracle 20: новые возможности для разработчика

Список нововведений в Oracle DB 20, важных, по моему мнению, для разработчика.

SQL макросы
Текст макроса подставляется в результирующий запрос.
Можно рассматривать как параметризованную вью
CREATE FUNCTION budget(job VARCHAR2, t DBMS_TF.table_t) RETURN VARCHAR2 SQL_MACRO IS
BEGIN
   RETURN q'{SELECT deptno, SUM(sal) budget 
             FROM t
             WHERE job = budget.job
             GROUP BY deptno}';
END;
SELECT * FROM budget('MANAGER', scott.emp);

Расширение возможности циклов
* шаг:
FOR n NUMBER(5,1) IN 1.0 .. 3.0 BY 0.5 LOOP
* направление:
FOR i IN REVERSE 1..3 LOOP
* вложенные циклы в 1 конструкции с условием выхода (WHILE)
FOR i IN 1, REPEAT i*2 WHILE i < 100 LOOP
* итерация по динамическому sql
FOR r rec_t IN VALUES OF (EXECUTE IMMEDIATE cursor_str) WHEN r.employee_id < 103 LOOP
Данные считываются порциями (bulk collect) - экономия памяти, вместо попытки вычитать таблицу целиком и уменьшение смены контекста, вместа построчного чтения
* условия в цикле (WHEN):
FOR power IN 2, REPEAT power*2 WHILE power <= 64 WHEN MOD(power, 32)= 0 LOOP

Именованные окна
 select ename, deptno, sal,
         sum(sal) over (w1 order by sal) cum_sal1,
         sum(sal) over (w2) cum_sal2
  from emp
  window w1 as (partition by deptno),
         w2 as (w1 order by sal);

Поддержка возможности исключения строки/группы (exclude current row) и возможность задания окна не только в кол-ве строк, но и групп (groups between)
select sal,
       sum(sal) over (w groups between 1 preceding and 1 following
                      exclude current row) as exclude_current_row
from emp
window w as (order by sal);

Json тип данных в таблицах
json будет хранится уже в разобранном дереве
CREATE TABLE j_purchaseorder
  (id          VARCHAR2 (32) NOT NULL PRIMARY KEY,
   date_loaded TIMESTAMP (6) WITH TIME ZONE,
   po_document JSON);
+ ускорение выборки части json
+ модификации части документа (JSON_TRANSFORM )
- замедление вставки
- лишняя нагрузка, если обработка не происходит в бд

Создание типов с колонками pl/sql типов (boolean, PLS_INTEGER)
но они должны быть созданы с директивой "NOT PERSISTABLE" - значит, что не могут быть сохранены, существуют только в памяти
CREATE TYPE tab_bool AS TABLE OF (BOOLEAN) NOT PERSISTABLE;

Инициализации объекта циклом с набором преобразовании прямо в конструкторе
result := vec_t (FOR i IN 1.n => 2*i);

Blockchain таблицы
CREATE BLOCKCHAIN TABLE bank_ledger (bank VARCHAR2(128), deposit_date DATE, deposit_amount NUMBER)
         NO DROP UNTIL 31 DAYS IDLE
         NO DELETE LOCKED
         HASHING USING "SHA2_512" VERSION "v1";
Особенности:
* только вставка
* цепочка подтверждается как: hash(row N) = hash(row data N & hash(N-1))
что гарантирует невозможность подмены данных

ML
* поддержка XGBoost для классификации и регрессии
* оптимизатор Adam для ускорения обучения нейронных сетей

Комментариев нет:

Отправка комментария