+ All Categories
Home > Documents > Oracle Database 12c R2Ÿример метаданных объекта: Таблица Primary Key...

Oracle Database 12c R2Ÿример метаданных объекта: Таблица Primary Key...

Date post: 26-Aug-2018
Category:
Upload: lenguyet
View: 271 times
Download: 0 times
Share this document with a friend
61
Transcript

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle Database 12c R2: Новые возможности для разработчиков

Игорь Мельников Ведущий консультант, Oracle 30 ноября 2016 года

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Safe Harbor Statement

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Oracle Confidential – Internal/Restricted/Highly Restricted 3

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Restricted 4

1

3

2

План

• SQLcl: Новый интерфейс командной строки для Oracle Database

• Новые возможности в SQL и PL/SQL

• Интеграция JSON и PL/SQL

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

SQLcl: Новый интерфейс командной строки для Oracle Database

5

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Что такое SQLcl?

Что нового по сравнению с SQL*Plus?

Интеграция с script engines (JSR-292)

Заключение

План -SQLcl

Повышение эффективности работы DBA и разработчиков

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Новая утилита для работы с Oracle Database

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Java 8, JRE

Размер - 14 MB

Поддержка OCI/Thick клиентов СУБД

В настоящий момент – в статусе Production

Дистрибутив свободно доступен на OTN

Также автоматически устанавливается с Oracle Database 12.2

Не требует установки – нужно только распаковать

Выполняемый файл называется просто - ‘sql’

SQLcl

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

C чего начать? Скачать

Распаковать (unzip)

Запустить файл ‘sql’

http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Поддержка всех платформ и версий СУБД

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Подключение к СУБД

Cпособы:

EZConnect

TNS

LDAP

Proxy

G/Login.SQL

/nolog

Native SSH tunnels

Ключ -oci для подключения через толстого клиента

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Выделены в списке вывода команды help

ALIAS

APEX

BRIDGE

CD

CTAS

DDL

FORMAT

HISTORY

INFORMATION (INFO & INFO+)

SSHTUNNEL

Что нового по сравнению с SQL+?

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Команды SQL*Plus, также поддерживаются …

COLUMN SALARY FORMAT $99,990

C/oldval/newval

DESC

& и &&

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Команды: ALIAS Cоздание собственных “команд” – соответствие SQL-запроса c bind-переменными и алиаса

Пример:

Показать все таблицы имеющие столбцы c типом :DATA_TYPE

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Команды: CTAS

DDL посылается в буфер – редактировать и выполнить

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Команды: DDL

Генерирует DDL для объекта

Можно создать SQL-скрипт с помощью команд DDL и SPOOL

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Автоматическое форматирование результатов запроса

SET SQLFORMAT

csv

html

xml

json

csv

insert

loader

ansiconsole

Форматирование результатов запроса

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

История выполнения

История выполнения команд

Сохраняются последние 100 команд

Сохраняется между сессиями

Навигация с помощью UP/DN

Также отслеживается и отображается время выполнения и число выполнений

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

INFOrmation – улучшенная команда DESCribe

Пример метаданных объекта: Таблица

Primary Key

Комментарии

Статус INMEMORY

Статистика (info+)

Индексы

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Автозавершение команд с помощью клавиши TAB

Тоже самое, что и ‘Ctrl+Spacebar’ в SQL Developer

Активируется с помощью табуляции (<TAB>)

Автоматическая подстановка имен таблиц и столбцов, имен файлов (для символа @) и т.д. – имеется встроенный парсер и SQL PL/SQL

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Форматирование с помощью ANSICONSOLE

Разбивка на страницы, форматирование столбцов, печать, листание страниц…

SET sqlformat ansiconsole

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

ANSIConsole – цветовое выделение

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Выполнение скриптов на JavaScript

• В SQLcl интегрирован движок JavaScript (Oracle Nashorn) из JRE 8

• Скрипт может одновременно использовать JavaScript, SQL и PL/SQL

SCRIPT

var v_xBinds = {};

v_xBinds.v_pTableName = 'test';

util.execute('begin ' +

' dbms_stats.gather_table_stats(ownname => USER, ' +

' tabname => :v_pTableName); ' +

'end;',v_xBinds);

/

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Доступ к объектной модели SQLcl прямо из скрипта

• Скрипту доступно управление SQLcl через его объектную модель

SCRIPT

sqlcl.setStmt("select something from somewhere;

set serveroutput on \n

@myscript \n begin null;end;");

sqlcl.run();

• Cоздание собственных команд

• Триггеры на стороне клиента (сommand pre/post callback)

• Также скрипт может получить управление SQL Developer через его объектную модель: выполнить действия не через GUI, а программно!

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Интеграция с классами JRE

• Скрипт на JavaScript может прозрачно использовать любой класс из библиотек Java SCRIPT

// Импортируем классы Thread и Runnable

var Thread = Java.type("java.lang.Thread");

var Runnable = Java.type("java.lang.Runnable");

// Создаем новый поток

this.thread = new Thread(new Runnable(){

run: main()

});

// Запускаем наш поток!

this.thread.start();

/

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Загрузка и выполнение JS-скрипта прямо внутри СУБД Новое в Oracle Database 12.2

• Загрузка скрипта в СУБД как текстового ресурса OJVM Avrora:

[oracle@host1 ~]$ loadjava –v –r –u scott/tiger test1.js

• Выдача пользователю прав на выполнение скрипта в БД:

GRANT dbmsjava_script TO scott;

• Выполнение скрипта в БД:

begin

dbms_javascript.run(‘test1.js’);

end;

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

SQLcl - заключение

Утилита командной строки необходима DBA и разработчикам

SQL*Plus – удобный и хороший инструмент, но лишен многих современных возможностей

SQLcl – это мощная утилита с интегрированными скриптовыми движками JVM (Jython, JRuby, Scala, Closure, Groove, …)

SQLcl позволяет повысить продуктивность работы администраторов и разработчиков

Cтандартно входит в состав Oracle Database 12.2

Повышение эффективности работы DBA и разработчиков

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Новые возможности в SQL и PL/SQL

Oracle Confidential – Internal/Restricted/Highly Restricted 29

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

SQL> CREATE TABLE

with_a_really_really_really_really_really_long_name (

and_lots_and_lots_and_lots_and_lots INT,

of_really_really_really_really_really_long_cols INT

);

Table created.

Длинные имена (до 128 байтов) в БД

• Длинные имена поддерживаются для всех объектов БД:

• Индексы, пользователи, PL/SQL-объекты, задания Oracle Scheduler, …

• Поддержка длинных имен в всех интерфейсах доступа к БД:

• JDBC, OCI, ODP.Net

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

CREATE OR REPLACE PROCEDURE process_tab IS

tab VARCHAR2(30);

BEGIN

SELECT table_name

INTO tab

FROM user_tables

WHERE …

Проблема с длинными именами

SQL> EXEC proccess_tab;

ORA-06502: PL/SQL: numeric or value error: character string

buffer too small

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• Гибкий контроль за размерностью переменных:

Cтатические выражения в объявлении переменных

Static expression in declaration

DECLARE

v1 VARCHAR2(30);

var_length constant PLS_INTEGER := 30;

v2 VARCHAR2(var_length+10);

BEGIN

...

Значение выражения должно быть известно на момент компиляции

• В статическом выражении разрешены только константы и вызовы встроенных функций

• Запрещены обращения к SQL и вызовы пользов. PLSQL-функций

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

CREATE OR REPLACE PROCEDURE process_tab is

$IF dbms_db_version.ver_le_12_1 $THEN

tab VARCHAR2(30);

$ELSE

tab VARCHAR2(ORA_MAX_NAME_LEN);

$END

BEGIN

… … …

ORA_MAX_NAME_LEN – служебная константа

12.1

12.2+

Только одна строка компилируется

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Обработка ошибок преобразования данных Ошибки преобразования типов нужно обрабатывать программно

SELECT

to_date(created_date, 'dd-mon-yyyy')

FROM

ext_tab;

ORA-01843: not a valid month

• Усложняется логика приложения и повышаются затраты на сопровождение (изменение) кода

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Обработка ошибок преобразования данных

Pluggable DB RAC и ASM In-Memory Sharding Partitioning PL/SQL JSON

Декларативные правила обработки ошибок преобразование типов

SELECT

to_date(created_date, 'dd-mon-yyyy')

FROM

ext_tab

WHERE

VALIDATE_CONVERSION(created_date as date,

'dd-MON-yyyy') = 1;

• Упрощается логика приложения и снижаются затраты на сопровождение (изменение) кода

SELECT

to_date(created_date DEFAULT '01-JAN-0001'

ON CONVERSION ERROR,'dd-mon-yyyy')

FROM

ext_tab;

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Обработка ошибок преобразования данных VALIDATE_CONVERSION – полный синтаксис

VALIDATE_CONVERSION (

<expression> as <data type>,

[ <format mask> ],

[ <nls_parameters> ]

)

1 = Преобразование успешно! 0 = Ошибка преобразования

По умолчанию используются NLS-установки

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Обработка ошибок преобразования типов Расширенный синтаксис оператора CAST

CAST (

<expression> AS <data type>

[ default <value> ON CONVERSION ERROR ],

[ <format mask> ],

[ <nls_parameters> ]

)

TO_DATE()

TO_NUMBER()

TO_TIMESTAMP()

и т.д.

Также …

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Определение регистронезависимых данных • Упрощение миграции с продуктов сторонних производителей с

регистронезависимой функциональностью • Cортировки и сравнения

используются объявленный collation

• Если collation не задан, тогда он наследуется от collation table по умолчанию на уровне таблицы или схемы

• Оператор COLLATE может быть использован для явного указания collation table в любом месте выражения

_CI = case-insensitive

Inherits BINARY

CREATE TABLE product

( id NUMBER,

name VARCHAR2(50) COLLATE BINARY_CI,

comments VARCHAR2(500)

) DEFAULT COLLATION BINARY;

SELECT name, comments FROM product

WHERE name LIKE '%BASE%' OR

comments COLLATE BINARY_CI LIKE '%REPORT%';

NAME COMMENTS _

Oracle Database

Activity-Based Management

Business Intelligence Replaces Reports

_CI = case-insensitive

наследует BINARY

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Как оченить качество тестов PL/SQL? До PL/SQL 12.2: невозможно точно измерить процент покрытия кода тестами

• Нужно экспериментальным путем подбирать параметры тестов, чтобы обеспечить полное покрытие кода тестами - необходимо инструментирование кода флагами

CREATE FUNCTION isValidAmount(v_pNum in number) RETURN boolean is

BEGIN

IF (v_pNum >= .1 THEN

RETURN TRUE;

END IF;

--делаем проверки и вычисления

… … …

RETURN FALSE;

END;

-1 1

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• Новый пакет DBMS_PLSQL_CODE_COVERAGE: –START_COVERAGE – включить измерение покрытия выполняемого кода

–STOP_COVERAGE - выключить

–ANALYZE_COVERAGE – получить отчет по проценту покрытия кода после тестов

–RESET_COVERAGE – сбросить счетчики измерения покрытия кода

–FLUSH_COVERAGE – записать на диск счетчики

PL/SQL 12.2: Точное измерение покрытия кода после тестов

PL/SQL block code coverage

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• Cоздание служебных таблиц для хранения информации о покрытии кода тестами:

• Запустить тесты с измерением покрытия кода:

Использование пакета DBMS_PLSQL_CODE_COVERAGE

PL/SQL block code coverage

BEGIN

dbms_plsql_code_coverage.create_coverage_tables;

END;

BEGIN

dbms_plsql_code_coverage.start_coverage('TEST1');

your_test_procedures;

dbms_plsql_code_coverage.stop_coverage;

END;

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• Запрос по служебным таблицам:

Получение результатов покрытия кода тестами

PL/SQL block code coverage

SELECT

u.owner,

u.name,

u.type,

round((sum(b.covered)*100)/count(*)) as pct_covered

FROM

dbmspcc_runs r

JOIN dbmspcc_units u ON r.run_id = u.run_id

JOIN dbmspcc_blocks b ON b.object_id = u.object_id

AND b.run_id = u.run_id

WHERE

r.run_comment = 'TEST1'

AND not_feasible = 0

GROUP BY

u.owner, u.name, u.type

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• Для служебных процедур (например: инициализация окружения тестирования), можно отключить сбор информации:

• Отключить для части кода измерение покрытия тестами:

Директива компилятора для выключения измерения покрытия

PL/SQL block code coverage - pragma

CREATE PROCEDURE initTestEnv IS

PRAGMA COVERAGE (‘NOT_FEASIBLE’);

BEGIN

… … …

END;

BEGIN

… … …

PRAGMA COVERAGE (‘NOT_FEASIBLE_START’);

debug_proc1();

PRAGMA COVERAGE (‘NOT_FEASIBLE_STOP’);

… … …

END;

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

CREATE OR REPLACE PACKAGE customer_pkg AS

/* get_customers_upper is deprecated. Do not use

or I'll come for you! */

CURSOR get_customers_upper (p_name varchar2) IS

SELECT * FROM customers

WHERE upper(customer_name) = upper(p_name);

pragma deprecate(get_customers_upper,

'Use get_customers instead');

CURSOR get_customers (p_name varchar2) IS

SELECT * FROM customers

WHERE customer_name = p_name;

PL/SQL-прагма DEPRECATE

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

PL/SQL-прагма DEPRECATE При использования устаревшего API выводится предупреждение

Warning: Procedure altered with compilation errors.

LINE/COL ERROR

-------- ------------------------------------------------

4/29 PLS-06020: reference to a deprecated entity:

GET_CUSTOMERS_UPPER declared in unit

CUSTOMER_PKG[2,10].

Use get_customers instead

8/9 PLS-06020: reference to a deprecated entity:

GET_CUSTOMERS_UPPER declared in unit

CUSTOMER_PKG[2,10].

Use get_customers instead

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Application Containers

Public 46

Хранение и распространение информации между несколькими PDB

Account Type • Credit • Debit • Check • Savings

Bank Account

Person

Bank Card

PDB$SEED APP ROOT PDB1 PDB2 PDB3

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Что такое Application Container?

• Application container это коллекция PDB содержащих Application Root и прикладные PDB, ассоциированные с ним

Public 47

CDB$ROOT

App Root AppPDB 1 AppPDB 2 PDB1

CDB$ROOT

APP Root PDB1

AppPDB 1 AppPDB 2

Физическое представление Логическое представление

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Application Containers • Совместное использование кода и данных приложения несколькими PDB

SQL> CREATE PLUGGABLE DATABASE saas_sales_ac AS APPLICATION CONTAINER ADMIN

USER saas_sales_ac_adm IDENTIFIED BY manager;

SQL> ALTER PLUGGABLE DATABASE saas_sales_ac OPEN;

SQL> ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app BEGIN INSTALL '1.0';

SQL> CONNECT saas_sales_adm/******@saas_sales_ac

SQL> CREATE TABLE saas_sales_adm.sales_mlt SHARING=METADATA

(YEAR NUMBER(4),

REGION VARCHAR2(10),

QUARTER VARCHAR2(4),

REVENUE NUMBER);

… … … … … … …

SQL> ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app END INSTALL '1.0‘;

METADATA DATA DATA_EXTENDED NONE

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Application Containers

• Application Root PDB определяет общую информацию необходимую приложению

– Метаданные и данные разделяются несколькими PDB

• Только одна копия общих данных и метаданных приложения

• Быстрое развертывание PDB из шаблона (Application Seed)

• Отображение данных из нескольких PDB (на основе оператора CONTAINERS)

• Поддержка обновления приложения на месте (In-Place Patching)

• Поддержка обновления через Unplug/Plug в Application Root новой версии

Public 49

Будущее для разработки приложений СУБД Oracle Database

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

AQ Sharded Queues Архитектура для производительности и масштабируемости

Instance 1

Part Shard

ENQ DEQ

Part Shard

ENQ DEQ

Part Shard

ENQ DEQ

Instance 2

Instance 3

Модель с единой логической очередью

Физическая очерерь: секции привязанные к узлам кластера RAC

ENQ

ENQ

ENQ

DEQ

DEQ

DEQ

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Real Time Materialized View

CREATE MATERIALIZED VIEW sum_sales_rtmv

REFRESH FAST ON DEMAND

ENABLE QUERY REWRITE

ENABLE ON QUERY COMPUTATION

AS

SELECT prod_name, SUM(quantity_sold) AS sum_qty, COUNT(quantity_sold) AS

cnt_qty, SUM(amount_sold) AS sum_amt,

COUNT(amount_sold) AS cnt_amt, COUNT(*) AS cnt_star

FROM sales, products

WHERE sales.prod_id = products.prod_id

GROUP BY prod_name;

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Интеграция JSON c PL/SQL

52

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Интеграция JSON c PL/SQL

• Новые встроенные PL/SQL-объектные типы для манипуляции с JSON-документами

• JSON_OBJECT_T : для работы с JSON-объектами

• JSON_ARRAY_T : для работы с массивами JSON-объектами

• JSON_OBJECT_T и JSON_ARRAY_T это подтипы JSON_ELEMENT_T

• Эти объектные типы предоставляют набор методов для манипулирования JSON

• Частичное изменение JSON-документа теперь поддерживается в PL/SQL

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Генерация JSON из строки таблицы

• Для генерации JSON доступны следующие функции: – JSON_OBJECT / JSON_OBJECTAGG

– JSON_ARRAY / JSON _ARRAYAGG

Public 54

SQL> SELECT JSON_OBJECT('Id' is EMPLOYEE_ID, 'FirstName' is FIRST_NAME,

2 'LastName' is LAST_NAME) JSON

3 FROM HR.EMPLOYEES

4 WHERE EMPLOYEE_ID = 100;

JSON

------------------------------------------------------------------------------

{ "Id" : 100 , "FirstName" : "Steven" , "LastName" : "King" }

SQL>

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JSON Data Guide: автоматический вывод cхемы JSON

SQL> desc MOVIE_TICKETS

NAME TYPE

--------------------- -----------

BOOKING_ID RAW(16)

BOOKING_TIME TIMESTAMP(6)

BOOKING_DETAILS VARCHAR2(4000)

Таблица содержит JSON-документы

JSON DataGuide Таблица расширяется виртуальными столбцами

SQL> desc MOVIE_TICKETS

NAME TYPE

--------------------- -----------

BOOKING_ID RAW(16)

BOOKING_TIME TIMESTAMP(6)

BOOKING_DETAILS VARCHAR2(4000)

BOOKING_DETAILS$Movie VARCHAR2(16)

BOOKING_DETAILS$Theater VARCHAR2(16)

BOOKING_DETAILS$Adults NUMBER

BOOKING_DETAILS$Time VARCHAR2(32) {

"Theater":"AMC 15",

"Movie":"Jurrasic World 3D",

"Time”:”2015-11-26T18:45:00",

"Tickets":{

"Adults":2

}

}

DBMS_JSON.Add_Virt_Col(

“MOVIE_TICKETS”,

“BOOKING_DETAILS”);

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Интеграция JSON с PL/SQL WITH FUNCTION updateTax(JSON_DOC in VARCHAR2 ) RETURN VARCHAR2 IS

jo JSON_OBJECT_T;

price NUMBER;

taxRate NUMBER;

BEGIN

jo := JSON_OBJECT_T(JSON_DOC);

taxRate := jo.get_Number('taxRate');

price := jo.get_Number('total');

jo.put('totalIncludingTax', price * (1+taxRate));

RETURN jo.to_string();

END;

ORDERS AS (

SELECT '{"taxRate":0.175,"total":10.00}' JSON_DOCUMENT

FROM dual

)

SELECT JSON_DOCUMENT, updateTax(JSON_DOCUMENT)

FROM ORDERS;

JSON_DOCUMENT UPDATETAX(JSON_DOCUMENT)

------------------------------- ---------------------------------------------------------

{"taxRate":0.175,"total":10.00} {"taxRate":0.175,"total":10.00,"totalIncludingTax":11.75}

Public 56

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

JSON-индекс : универсальный индекс для JSON-документов

• Поддержка поиска в JSON использую ключ, путь и значение

• Поддержка поиска по диапазону для числовых значений

• Поддержка полнотекстового поиска:

– Поддержка логических операторов в предикатах поиска (AND, OR, NOT)

– Поиск фраз, поиск и близость "в поле" поисков.

– Неточные запросы: нечеткое соответствие, по произношению

– Автоматическая языковая поддержка для 32 языков

– Полная, интегрированная структура тезауруса ISO

Public 57

CREATE SEARCH INDEX JSON_SEARCH_INDEX

ON J_PURCHASEORDER (PO_DOCUMENT) FOR JSON;

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

LiveSQL.oracle.com

58

Вся мощь Oracle SQL в вашем браузере

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Oracle On GitHub

Oracle Confidential – Internal/Restricted/Highly Restricted 59

www.github.com/oracle

• Официальный контент от Oracle на GitHub

• Примеры и инструменты на Java, SQL, Python, Node.js, PL/SQL, Docker

• Репозиторий регулярно обновляется

• Главный источник для компонентов Open Source

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Internal/Restricted/Highly Restricted 60


Recommended