ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die...

70
ROGER TROLLER, FINNOVA ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER DÜSSELDORF, 31.5.2017 01.06.2017 ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 1

Transcript of ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die...

Page 1: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

ROGER TROLLER, FINNOVA

ORACLE 12.2NEW FEATURES FÜR

SQL & PL/SQLENTWICKLER

DÜSSELDORF, 31.5.2017

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 1

Page 2: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ SQL & PL/SQL seit 1989

➢ 20 Jahre als Consultant

➢ 18 Jahre als Trainer für SQL & PL/SQL

➢ Gewinner Database Developer Choice Award PL/SQL

➢ Beta Tester ORACLE 12 Release 1

➢ Beta Tester ORACLE 12 Release 2

➢ Heute : Consultant Data Migration

➢ Blog: www.rogertroller.com

ROGER TROLLER

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 2

ABOUT

Page 3: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Banking Software

➢ Eingesetzt bei 100 Banken in der Schweiz

➢ 4 Standorte

➢ 400 Mitarbeiter

➢ Standardsoftware basierend auf

➢ Java

➢ PL/SQL

➢ ORACLE 11.2

➢ Migration auf 12.2 geplant für 2018

FINNOVA

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 3

ABOUT

Page 4: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Lange Namen für ORACLE Objekte

LISTAGG Erweiterungen

Data Conversion Erweiterungen

Deprecated Pragma

Code Coverage

Collation

PLSCOPE Erweiterungen

Whitelist Erweiterung

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 4

AGENDA

ES HAT SICH EINIGESGETAN!

Page 5: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ 128 statt 30 Bytes möglich

➢ Keine lästigen Abkürzungen mehr um Dinge sinnvoll zu benennen

➢ Ermöglicht sprechende Namen für Datenbankobjekte

➢ Beispiele:

➢ Fremdschlüssel mit Von-Nach-Bezeichnung ohne dass man diese abkürzen muss

➢ Indexe mit Bezeichnung des Zweckes

➢ Constraints mit Umschreibung der Prüfung

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 5

LANGE NAMEN FÜR ORACLE OBJEKTE

ENDLICH?

O12R2_LongNames1.sql

Page 6: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Funktioniert damit unsere Applikation noch?

➢ Beispiel Logging?

➢ Dynamisches SQL?

➢ Hard-Coded Variablen Längen?

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 6

LANGE NAMEN FÜR ORACLE OBJEKTE

ABER

Page 7: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 7

LANGE NAMEN FÜR ORACLE OBJEKTE

...

modul_name1 VARCHAR2(30);

modul_name2 VARCHAR2(61);

BEGIN

modul_name1 := $$PLSQL_UNIT;

modul_name2 := USER||'.'||$$PLSQL_UNIT;

...

WER KENNT DIES NICHT?

Page 8: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 8

LANGE NAMEN FÜR ORACLE OBJEKTE

➢ Gleich ein weiteres neues Feature:

➢ Verwendung von statischen PL/SQL Ausdrücken, wo vorher nur Literale erlaubt waren

➢ ORA_MAX_NAME_LEN ist in DBMS_STANDARD definiert

...

modul_name1 all_objects.object_name%TYPE;

modul_name2 VARCHAR2((2*ORA_MAX_NAME_LEN) + 1);

BEGIN

modul_name1 := $$PLSQL_UNIT;

modul_name2 := USER||'.'||$$PLSQL_UNIT;

EINFACH ZULÖSEN

Page 9: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 9

LANGE NAMEN FÜR ORACLE OBJEKTE

DBMS_SQL?

begin

print_table('SELECT COUNTRY_NAME FROM HR.COUNTRIES');

end;

/

COUNTRY_NAME : Argentina

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

COUNTRY_NAME : Australia

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

COUNTRY_NAME : ...

O12R2_LongNames2.sql

Page 10: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 10

LANGE NAMEN FÜR ORACLE OBJEKTE

UND MIT LANGEN NAMEN?

begin

print_table('SELECT * FROM

CHILD_TABLE_WITH_REALLY_LONG_NAMES_TOO');

end;

/

Error report -

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

buffer too small

ORA-06512: at "SYS.DBMS_SQL", line 2084

ORA-06512: at "HR.PRINT_TABLE", line 11

Page 11: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 11

LANGE NAMEN FÜR ORACLE OBJEKTE

DBMS_SQL ISTDAS PROBLEM

➢ DESC_TAB

➢ Implementiert einen Array mit einem Record (DESC_REC), in welchem der Name der Spalten auf 32 Byte beschränkt ist.

➢ DESC_TAB2 ist die Lösung

➢ Jedoch wird DESC_TAB2 durch eine andere Funktion abgefüllt, als die, welche wir in Vergangenheit verwendet haben

➢ DESCRIBE_COLUMNS2 statt DESCRIBE_COLUMNS

Page 12: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Vorsicht!

➢ Der Zugewinn ist aus meiner Sicht kleiner als das Risiko, welches man eingeht. FAZIT:

VORSICHT!

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 12

LANGE NAMEN FÜR ORACLEOBJEKTE

Page 13: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Lange Namen für ORACLE Objekte

LISTAGG Erweiterungen

Data Conversion Erweiterungen

Deprecated Pragma

Code Coverage

Collation

PLSCOPE Erweiterungen

Whitelist Erweiterung

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 13

AGENDA

ES HAT SICH EINIGESGETAN!

Page 14: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Seit der Version 11.2 kennen wir die LISTAGG Funktion

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 14

LISTAGG ERWEITERUNGEN

SELECT d.department_name

,LISTAGG(e.last_name || ' ' || e.first_name,',')

WITHIN GROUP (ORDER BY e.last_name) AS employees

FROM departments d

JOIN employees e ON (e.department_id = d.department_id)

GROUP BY d.department_name;

ORA-01489: result of string concatenation is too long

O12R2_LISTAGG1.sql

WER KENNT DIES NICHT?

Page 15: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

ORACLE 12.2 erweitert die LISTAGG Funktion um eine Überlaufbehandlung.

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 15

LISTAGG ERWEITERUNGEN

PROAKTIVES FEHLERHANDLING

O12R2_LISTAGG1.sql

Page 16: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ ON OVERFLOW ERROR (Default)

➢ ON OVERFLOW TRUNCATE

➢ schneidet ganze Elemente weg und fügt die Anzahl abgeschnittener Elemente als Zähler hinzu

➢ ON OVERFLOW TRUNCATE WITHOUT COUNT

➢ schneidet ganze Elemente weg ohne Zähler

➢ ON OVERFLOW TRUNCATE 'truncation indicator' WITH

COUNT

➢ ermöglicht einen eigenen Indikator für den Überlauf

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 16

LISTAGG ERWEITERUNGEN

VIELE MÖGLICHKEITEN

O12R2_LISTAGG1.sql

Page 17: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Schliesst eine Lücke beim erstellen von CSV-Strings

➢ Eliminiert eine Fehlerquelle, welche an vielen Orten (implizit) vorhanden ist.

➢ Löst die Problematik überlanger Strings nicht vollständig

➢ Eine eigene LISTAGG_CLOB Funktion ist eventuell weiterhin erforderlich

FAZIT:TOP!

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 17

LISTAGG ERWEITERUNGEN

Page 18: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Lange Namen für ORACLE Objekte

LISTAGG Erweiterungen

Data ConversionErweiterungen

Deprecated Pragma

Code Coverage

Collation

PLSCOPE Erweiterungen

Whitelist Erweiterung

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 18

AGENDA

ES HAT SICH EINIGESGETAN!

Page 19: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Wer kennt dies nicht?

➢ Daten laden wobei ein Feld, welches „nur“ nummerische oder Datumsdaten enthält als VARCHAR2 definiert ist?

➢ Alle darin gespeicherten Werte „ganz sicher“ das gleiche Format aufweisen?

➢ Wer hat bisher keine solche (oder ähnliche) Funktion geschrieben?

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 19

DATA CONVERSION ERWEITERUNGEN

IMMER WIEDER…

CREATE OR REPLACE FUNCTION is_number (in_number IN VARCHAR2)

RETURN NUMBER

IS

BEGIN

Page 20: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

ORACLE 12.2 kennt zwei Erweiterungen, welche uns die Konvertierung von Daten erleichtern.

➢ Neue Funktion VALIDATE_CONVERSION

➢ Prüfen ob Konversionen möglich sind (Funktionsresultat 0 oder 1)

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 20

DATA CONVERSION ERWEITERUNGEN

SEHR NÜTZLICH!

Page 21: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Beispiele (finden nicht nummerischer Werte):

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 21

DATA CONVERSION ERWEITERUNGEN

WITH data (str) AS (SELECT 'A3' FROM dual union all

SELECT '57.15' FROM dual union all

SELECT '-69.23' FROM dual)

SELECT str

, VALIDATE_CONVERSION(str AS NUMBER) AS conv

FROM data;

STR CONV

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

A3 0

57.15 1

-69.23 1

O12R2_DataConversion1.sql

DAMIT LÄSST SICHARBEITEN!

Page 22: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

ORACLE 12.2 kennt zwei Erweiterungen, welche uns die Konvertierung von Daten erleichtern.

➢ Erweiterung der Syntax bei Konvertierungsfunktionen (TO_DATE, TO_NUMBER, CAST, etc.)

➢ Ersatzwert, falls Konversion fehl schlägt (NULL, DEFAULT)

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 22

DATA CONVERSION ERWEITERUNGEN

AUCH HIER: SEHR GUT

Page 23: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Beispiele (mehrstufige Datumskonvertierung):

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 23

DATA CONVERSION ERWEITERUNGEN

WITH data (str) AS (SELECT '15-03-2016' FROM dual UNION ALL

SELECT '2015.08.27' FROM dual UNION ALL

SELECT '15-MAR-99' FROM dual UNION ALL

SELECT '23. März 99' FROM dual UNION ALL

SELECT 'Test' FROM dual)

SELECT str, COALESCE(TO_DATE(str DEFAULT NULL ON CONVERSION ERROR,'DD-MON-RR')

,TO_DATE(str DEFAULT NULL ON CONVERSION ERROR,'DD. Month RR'

,'NLS_DATE_LANGUAGE=GERMAN')

,TO_DATE(str DEFAULT NULL ON CONVERSION ERROR,'DD.MM.YYYY')

,TO_DATE(str DEFAULT NULL ON CONVERSION ERROR,'YYYY.MM.DD'))

AS conversion

FROM data;

O12R2_DataConversion2.sql

Page 24: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Beispiele (mehrstufige Datumskonvertierung) Resultat:

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 24

DATA CONVERSION ERWEITERUNGEN

WIE FINDEN WIRDAS?

STR CONVERSION

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

15-03-2016 15.03.2016

2015.08.27 27.08.2015

15-MAR-99 15.03.1999

23. März 99 23.03.1999

Test

Page 25: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Wird uns sehr helfen, mit fehlerhaften Input-Daten umzugehen.

➢ Selbstgestrickte Lösungen sind nicht länger erforderlich.

FAZIT:TOP!

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 25

DATA CONVERSION ERWEITERUNGEN

Page 26: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Lange Namen für ORACLE Objekte

LISTAGG Erweiterungen

Data Conversion Erweiterungen

Deprecated Pragma

Code Coverage

Collation

PLSCOPE Erweiterungen

Whitelist Erweiterung

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 26

AGENDA

ES HAT SICH EINIGESGETAN!

Page 27: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated(veraltet/überholt) zu kennzeichnen.

Eigenschaften

➢ Beim Kompilieren der deprecated gekennzeichneten Program Unit erscheint eine Warnung

➢ Beim Kompilieren einer Program Unit, welche eine deprecated Program Unit verwendet erscheint die hinterlegte Warnung

➢ Die Warnungen lassen sich zu Fehler anheben.

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 27

DEPRECATED PRAGMA

TÖNT GUT.

Page 28: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 28

DEPRECATED PRAGMA

ALTER SESSION SET PLSQL_WARNINGS = 'Enable:All'

/

CREATE OR REPLACE PROCEDURE p IS

PRAGMA deprecate(p,'p is deprecated please use p2 instead.');

BEGIN

sys.dbms_output.put_line('p');

END p;

/

Warning(2,4): PLW-06019: entity P is deprecated

O12R2_DeprecatedPragma1.sql

Page 29: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 29

DEPRECATED PRAGMA

CREATE OR REPLACE PACKAGE pkg IS

PROCEDURE p;

PRAGMA deprecate(p

,'pkg.p is deprecated please use pkg.p2 instead.');

PROCEDURE p2;

END;

/

CREATE OR REPLACE PACKAGE BODY pkg IS

PROCEDURE p IS

BEGIN

sys.dbms_output.put_line('pkg.p');

END p;

...

O12R2_DeprecatedPragma2.sql

Page 30: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 30

DEPRECATED PRAGMA

CREATE OR REPLACE PROCEDURE q IS

BEGIN

pkg.p();

sys.dbms_output.put_line('q');

END q;

/

Warning(3,4): PLW-06020: reference to a deprecated entity: P

declared in unit PKG[2,14]. pkg.p is deprecated please use

pkg.p2 instead.

Page 31: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 31

DEPRECATED PRAGMA

ALTER SESSION SET PLSQL_WARNINGS = 'ERROR:6020';

CREATE OR REPLACE PROCEDURE q IS

BEGIN

pkg.p();

sys.dbms_output.put_line('q');

END q;

/

Error(5,4): PLS-06020: reference to a deprecated entity: P

declared in unit PKG[2,14]. pkg.p is deprecated please use

pkg.p2 instead.

O12R2_DeprecatedPragma3.sql

ALLES GUT, ODER?

Page 32: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Ich würde mir wünschen:

➢ Möglichkeit selektiv Deprecations auf Error zu stellen über:

➢ Unique Identifier

➢ Datumsparameter

➢ Zusätzlicher Parameter, welcher mit ERROR = TRUE/FALSE gefüllt werden könnte (und über eine Konstante befüllt werden kann).

FAZIT:HMM…

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 32

DEPRECATED PRAGMA

Page 33: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Lange Namen für ORACLE Objekte

LISTAGG Erweiterungen

Data Conversion Erweiterungen

Deprecated Pragma

Code Coverage

Collation

PLSCOPE Erweiterungen

Whitelist Erweiterung

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 33

AGENDA

ES HAT SICH EINIGESGETAN!

Page 34: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt uns Daten über die Testabdeckung des von uns getesteten Codes zu sammeln.

Eigenschaften

➢ Daten werden in 3 Tabellen gesammelt

➢ DBMSPCC_RUNS

➢ DBMSPCC_UNITS

➢ DBMSPCC_BLOCKS

➢ Unerreichbarer Code lässt sich kennzeichnen

➢ Sektion

➢ Block

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 34

DBMS_PLSQL_CODE_COVERAGE

FÜR DAS TESTENTOLL!

Page 35: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Erstellen der notwendigen Tabellen:

Die Tabellen können auch zentral angelegt und über Synonyme und Grants dem Test -Ausführenden zur Verfügung gestellt werden.

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 35

CODE COVERAGE PACKAGE

REPOSITORY

begin

sys.dbms_plsql_code_coverage.create_coverage_tables();

end;

/

O12R2_CodeCoverage0.sql

Page 36: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Erstellen eines Test-Packages

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 36

CODE COVERAGE PACKAGE

CREATE OR REPLACE PROCEDURE coveragetest(in_param IN INTEGER) AS

l_res INTEGER := in_param mod 2;

BEGIN

IF l_res = 0 THEN sys.dbms_output.put_line(in_param || ' is even');

ELSIF l_res = 1 THEN sys.dbms_output.put_line(in_param || ' is odd');

ELSIF l_res IS NULL THEN sys.dbms_output.put_line(in_param || ' is null');

ELSE sys.dbms_output.put_line(in_param || ' is unknown');

END IF;

END coveragetest;

/

O12R2_CodeCoverage1.sql

Page 37: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Zu beachten: Run Comment „Coverage Test 1“ ist kein Unique Key, heisst, es kann in den Tabellen, mehrere Testläufe mit dem gleichen Run Comment haben.

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 37

CODE COVERAGE PACKAGE

DECLARE

l_run_id pls_integer;

BEGIN

l_run_id :=

sys.dbms_plsql_code_coverage.start_coverage('Coverage Test 1');

coveragetest(100);

sys.dbms_plsql_code_coverage.stop_coverage();

END;

/DURCHFÜHRUNGTEST

Page 38: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Analyse der Testabdeckung

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 38

CODE COVERAGE PACKAGE

SELECT r.run_comment ,u.owner ,u.name ,u.type

,ROUND((COUNT(CASE b.covered WHEN 1 THEN 1 ELSE NULL END)

+ COUNT(CASE WHEN b.covered = 0

AND b.not_feasible = 1 THEN 1 ELSE NULL END))

/ NULLIF(COUNT(*),0) * 100,2) AS pct_covered

FROM dbmspcc_runs r

JOIN dbmspcc_units u ON (u.run_id = r.run_id)

JOIN dbmspcc_blocks b ON (b.object_id = u.object_id AND b.run_id = r.run_id)

GROUP BY r.run_comment ,u.owner ,u.name ,u.type;

RUN_COMMENT OWNER NAME TYPE PCT_COVERED

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

Coverage Test 1 TEST COVERAGETEST PROCEDURE 28.57

Page 39: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Erstellen eines weiteren Test-Packages mit „not feasible“ + Testrun „Coverage Test 2“ gleiche Parameter

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 39

CODE COVERAGE PACKAGE

CREATE OR REPLACE PROCEDURE coveragetest2(in_param IN INTEGER) AS

l_res INTEGER := in_param mod 2;

BEGIN

IF l_res = 0 THEN sys.dbms_output.put_line(in_param || ' is even');

ELSIF l_res = 1 THEN sys.dbms_output.put_line(in_param || ' is odd');

ELSIF l_res IS NULL THEN sys.dbms_output.put_line(in_param || ' is null');

ELSE

PRAGMA COVERAGE ('NOT_FEASIBLE');

sys.dbms_output.put_line(in_param || ' is unknown');

END IF;

END coveragetest2;

O12R2_CodeCoverage2.sql

Page 40: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Erneute Analyse der Testabdeckung

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 40

CODE COVERAGE PACKAGE

RUN_COMMENT OWNER NAME TYPE PCT_COVERED

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

Coverage Test 1 TEST COVERAGETEST PROCEDURE 28.57

Coverage Test 2 TEST COVERAGETEST2 PROCEDURE 42.86

Page 41: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Ermöglicht uns präzise Aussagen darüber, welche Code-Teile getestet worden sind.

➢ Ermöglicht gezielte Tests. FAZIT:SEHR NÜTZLICH

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 41

CODE COVERAGE PACKAGE

Page 42: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Lange Namen für ORACLE Objekte

LISTAGG Erweiterungen

Data Conversion Erweiterungen

Deprecated Pragma

Code Coverage

Collation

PLSCOPE Erweiterungen

Whitelist Erweiterung

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 42

AGENDA

ES HAT SICH EINIGESGETAN!

Page 43: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Collation legt fest, wie Strings verglichen werden.

➢ Es ermöglich Vergleiche ohne Berücksichtigung von Gross-/Kleinschreibung und Akzenten

➢ Dies wirkt sich auf die Sortierung und den Vergleich von Strings aus.

➢ Mit ORACLE 12.2 erhalten wir die Möglichkeit auf verschiedenen Ebenen die zu verwendende Collation zu definieren:

➢ Spalte

➢ Tabelle

➢ Schema

➢ Session

➢ Datenbank

➢ Statement

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 43

COLLATION (STRINGVERGLEICH)

KOMMT EINBISSCHEN SPÄT

Page 44: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Voraussetzungen:

➢ ORACLE 12.2

➢ MAX_STRING_SIZE auf Extended gesetzt

➢ COMPATIBLE Parameter 12.2

➢ Zwei verschiedene Collation Typen

➢ Binary

➢ Linguistisch

➢ Zwei verschiedene Verhaltensweisen

➢ _CI = Case Insensitive

➢ _AI = Accent und Case Insensitive

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 44

COLLATION (STRINGVERGLEICH)

Page 45: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Erstellen einer Tabelle mit einer Case-Insensitiven und einer Case/Accent-InsensitivenSpalte

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 45

COLUMN LEVEL COLLATION

CREATE TABLE collate_test (

default_string VARCHAR2(100)

,ci_string VARCHAR2(100) COLLATE binary_ci

,ai_string VARCHAR2(100) COLLATE german_ai

);

insert into collate_test values ('MÜLLER','MÜLLER','MÜLLER');

insert into collate_test values ('Müller','Müller','Müller');

insert into collate_test values ('mÜLLER','mÜLLER','mÜLLER');

insert into collate_test values ('Mûller','Mûller','Mûller');

insert into collate_test values ('Muller','Muller','Muller');

insert into collate_test values ('Múllër','Múllër','Múllër');

O12R2_Collation1.sql

Page 46: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Überprüfen der Collation

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 46

COLUMN LEVEL COLLATION

SELECT COUNT(DISTINCT default_string) AS "Default"

,COUNT(DISTINCT ci_string) AS "Case Insensitive"

,COUNT(DISTINCT ai_string) AS "Accent Insensitive"

FROM collate_test;

Default Case Insensitive Accent Insensitive

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

6 4 1

Page 47: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Überprüfen der Collation – Abfrage auf die Spalte „Default_String“

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 47

COLUMN LEVEL COLLATION

SELECT *

FROM collate_test

WHERE default_string like '%ü%';

DEFAULT_STRING CI_STRING AI_STRING

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

Müller Müller Müller

DEFAULT STRING

Page 48: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Überprüfen der Collation – Abfrage auf die Spalte „AI_STRING“

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 48

COLUMN LEVEL COLLATION

SELECT *

FROM collate_test

WHERE ai_string like '%ü%';

DEFAULT_STRING CI_STRING AI_STRING

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

MÜLLER MÜLLER MÜLLER

Müller Müller Müller

mÜLLER mÜLLER mÜLLER

Mûller Mûller Mûller

Muller Muller Muller

Múllër Múllër Múllër

ACCENT/CASE INSENSITIVE

Page 49: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Kann bei CREATE TABLE angegeben werden (DEFAULT COLLATION)

➢ Kann über ALTER TABLE angepasst werden

➢ Wirkt sich nicht auf schon existierende Spalten dieser Tabelle aus, sondern lediglich auf später hinzugefügte.

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 49

TABLE LEVEL COLLATION

IST EIN DEFAULT VERHALTEN

O12R2_Collation2.sql

Page 50: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Anlegen einer neuen Tabelle mit der Default Collation „GERMAN_AI“

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 50

TABLE LEVEL COLLATION

CREATE TABLE collate_test2 (col1 VARCHAR2(30))

DEFAULT COLLATION GERMAN_AI

/

insert into collate_test2 values ('Müller');

ALTER TABLE collate_test2 DEFAULT COLLATION GERMAN_CI;

ALTER TABLE collate_test ADD (col2 VARCHAR2(30));

insert into collate_test2 values ('Müller','Müller');

Page 51: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Die Collation ist in …_TAB_COLUMNS hinterlegt

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 51

TABLE LEVEL COLLATION

SELECT column_name, collation

FROM user_tab_columns

WHERE table_name = 'COLLATE_TEST2';

COLUMN_NAME COLLATION

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

COL1 GERMAN_AI

COL2 GERMAN_CI DATA DICTIONARY

Page 52: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Sortieren

➢ Suchen

➢ Gruppieren

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 52

STATEMENT LEVEL COLLATION O12R2_Collation3.sql

Page 53: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Auf Spalten, die nicht explizit case/accent-insensitive angelegt worden sind über:

➢ COLLATE

➢ NLSSORT

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 53

STATEMENT LEVEL COLLATION - SORTIEREN

SELECT *

FROM collate_test3

ORDER BY default_string COLLATE BINARY_CI;

SELECT *

FROM collate_test3

ORDER BY NLSSORT(default_string,'NLS_SORT=BINARY_CI');

CASE INSENSITIVE ORDER BY

Page 54: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Auf Spalten, die nicht explizit case/accent-insensitive angelegt worden sind über:

➢ COLLATE

➢ NLSSORT

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 54

STATEMENT LEVEL COLLATION - GRUPPIEREN

SELECT default_string COLLATE GERMAN_AI, count(*)

FROM collate_test3

GROUP BY default_string COLLATE GERMAN_AI;

DEFAULT_STRING COUNT(*)

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

Müller 6GROUP BY

Page 55: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Auf Spalten, die nicht explizit case/accent-insensitive angelegt worden sind, kann über: COLLATE oder NLSSORT gesucht werden.

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 55

STATEMENT LEVEL COLLATION - SUCHEN

SELECT *

FROM collate_test3

WHERE default_string COLLATE GERMAN_AI

LIKE '%u%' COLLATE GERMAN_AI;

DEFAULT_STRING

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

Müller

MULLER

MÛLLER

...

SUCHEN AUF “NORMALEN” SPALTEN

Page 56: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 56

COLLATION INDIZIERUNG

➢ Auf Columns mit „Named Collations“ werden immer funktionsbasierte Indexe erzeugt

➢ Zudem wird zum Zeitpunkt der Indizierung auch eine virtuelle Spalte (hidden) angelegt

O12R2_Collation4.sql

SELECT column_name, data_type, data_length, column_id, data_default

FROM user_tab_cols

WHERE table_name = 'COLLATE_TEST';

COLUMN_NAME DATA_TYPE DATA_LENGTH COLUMN_ID DATA_DEFAULT

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

DEFAULT_STRING VARCHAR2 400 1

CI_STRING VARCHAR2 400 2

AI_STRING VARCHAR2 400 3

COL2 VARCHAR2 120 4

SYS_NC00005$ RAW 3210 NLSSORT("AI_STRING",'nls_sort=''GERMAN_AI''')

SYS_NC00006$ RAW 600 NLSSORT("CI_STRING",'nls_sort=''BINARY_CI''')

Page 57: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 57

COLLATION INDIZIERUNG

➢ Auch auf Columns ohne „Named Collations“ kann ein function based Index erzeugt werden

➢ Auch dies erzeugt eine virtuelle Spalte auf der entsprechenden Tabelle (allerdings ohne Korrelation)

O12R2_Collation4.sql

SELECT column_name, column_id, data_default, collation, collated_column_id

FROM user_tab_cols uc

WHERE table_name = 'COLLATE_TEST3';

COLUMN_NAME DATA_TYPE DATA_LENGTH COLUMN_ID DATA_DEFAULT

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

DEFAULT_STRING VARCHAR2 400 1

CI_STRING VARCHAR2 400 2

AI_STRING VARCHAR2 400 3

COL2 VARCHAR2 120 4

SYS_NC00005$ RAW 3210 NLSSORT("AI_STRING",'nls_sort=''GERMAN_AI''')

SYS_NC00006$ RAW 600 NLSSORT("CI_STRING",'nls_sort=''BINARY_CI''')

Page 58: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Collations können auch in Views verwendet werden um z.B. eine linguistische Sortierung einer nicht mit einer named collation belegten Spalte zu ermöglichen.

➢ Oder zu Suchen

➢ Oder zu Gruppieren

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 58

VIEWS USING COLLATION

COLLATION IN VIEWS

O12R2_Collation5.sql

Page 59: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Prinzipiell gut

➢ Werden wir deswegen auf extended varchar2 support umstellen?

➢ Wie oft brauchen wir dies?

➢ Falls wir es brauchen, ist es sicherlich schon anders gelöst…

FAZIT:GUT, ABER

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 59

COLLATION

Page 60: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Lange Namen für ORACLE Objekte

LISTAGG Erweiterungen

Data Conversion Erweiterungen

Deprecated Pragma

Code Coverage

Collation

PLSCOPE Erweiterungen

Whitelist Erweiterung

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 60

AGENDA

ES HAT SICH EINIGESGETAN!

Page 61: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Seit er ORACLE Version 11.1 steht mit PL/Scope ein Tool zur Verfügung, welches den PL/SQL Code zur Kompilierungszeit analysiert und Information über darin verwendete Komponenten (Identifiers, Program Units) zur Verfügung stellt.

➢ Bisher hat sich die Analyse auf den PL/SQL Code beschränkt, statisches SQL wurde ignoriert.

➢ Die Version 12.2 schliesst diese Lücke und schreibt statische SQL in die Tabelle DBA_STATEMENTS

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 61

PL/SCOPE ERWEITERUNGEN

WER KENNTPL/SCOPE?

Page 62: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Diese Erweiterung erlaubt es uns gleiche SQL-Statements, welche an verschiedenen Orten verwendet werden zu erkennen.

➢ Eine CRUD-Liste aufzubauen

➢ Abhängigkeiten genauer zu erkennen

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 62

PL/SCOPE ERWEITERUNGEN

TÖNT GUT UND ISTES AUCH…

O12R2_PLSCOPE1.sql

Page 63: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Es bietet sich an, vorgefertigte Views zu verwenden, welche die PL/SCOPE Auswertungen „lesbarer“ machen

➢ Beispiel: https://github.com/PhilippSalvisberg/plscope-utils

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 63

PL/SCOPE ERWEITERUNGEN

HILFSMITTEL

O12R2_PLSCOPE2.sql

Page 64: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Mit diesen Erweiterungen wird PL/SCOPE endlich zum fliegen kommen.

➢ Erkenntnisse, die man nun durch PL/SCOPE gewinnen kann sind sehr wertvoll.

FAZIT:JAWOHL!

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 64

PL/SCOPE ERWEITERUNGEN

Page 65: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

Lange Namen für ORACLE Objekte

LISTAGG Erweiterungen

Data Conversion Erweiterungen

Deprecated Pragma

Code Coverage

Collation

PLSCOPE Erweiterungen

Whitelist Erweiterung

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 65

AGENDA

ES HAT SICH EINIGESGETAN!

Page 66: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ ORACLE 12.1 gab uns die Möglichkeit auf Eben Program Unit (Package, Prozedur, Funktion oder Object Type) zu entscheiden, welche andere Program Unit darauf zugreifen darf.

➢ ORACLE 12.2 verfeinert dieses Konzept so, dass neu auf Stufe Package Prozedur / Package Function / Object Type Methode definiert werden kann, welche andere Program Units darauf zugreifen dürfen.

➢ Definieren in Spezifikation UND im Body

➢ Verletzung führt zu PLS-00904 während Kompilation

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 66

WHITELIST ERWEITERUNG (ACCESSIBLE BY)

SCHON BENUTZT?

Page 67: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

CREATE OR REPLACE PACKAGE BODY emp_tapi IS

-- ==========================================================

-- insert

-- ==========================================================

PROCEDURE ins (emp_tapi_rec IN OUT NOCOPY emp_tapi_rect)

ACCESSIBLE BY (PACKAGE EMP_MAINT_UP.newEmp)

IS

BEGIN

...

END ins;

...

Beispiel:

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 67

WHITELIST ERWEITERUNG (ACCESSIBLE BY)

BESSEREKONTROLLE

Page 68: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

➢ Ich glaube trotzdem nicht daran, dass dies oft benutzt werden wird…

FAZITGUT

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 68

WHITELIST ERWEITERUNGEN

Page 69: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

WIR HABEN EINIGES GESEHEN, ABER ES GIBT NOCH SO VIEL MEHR…

01.06.2017ORACLE 12.2 - NEW FEATURES FÜR SQL & PL/SQL ENTWICKLER 69

• JSON• PARTITIONING• ANALYTIC VIEWS• ETC.

Page 70: ORACLE 12.2 NEW FEATURES FÜR SQL & PL/SQL … · Mit der Version 12.2 erhalten wir die Möglichkeit eigene Program Units als deprecated ... Das Package DBMS_PLSQL_CODE_COVERAGE erlaubt

DANKE