Oracle Developer Monthly: Juni 2014Oracle Developer Monthly
Datenbank-Update für Anwendungsentwickler Februar 2016
Carsten Czarski Business Unit Database Oracle Deutschland B.V.
& Co KG
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
http://tinyurl.com/ModernAppDev12c
http://tinyurl.com/oracloudnow
http://tinyurl.com/ModernAppDev12c
http://tinyurl.com/modernappdev
Wichtige Termine
• 10. März APEX Meetup in Hamburg – mit Marc Sewtz
• 15. März Oracle Data Warehouse Konferenz 2016 in Mainz – 2
Tage
• 15. März "APEX Startup" Hands-On Workshop bei der MT AG in
Ratingen
• 16. März "APEX Startup" Hands-On Workshop bei Oracle in
Dreieich
• 17. März APEX Meetup in München – mit Marc Sewtz
• 20. April Oracle IT Transformation Summit – München
• 26. April DOAG APEX Connect 2016 in Berlin
• Mai 2016 DOAG 2016 Datenbank in Düsseldorf
• Juni 2016 DOAG 2016 BI in Bonn
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Digital Transformation IT Summit – 20. April 2016 München
http://digitaltransformationit.oracle.com/munich/de/
APEX Competition: Wer baut das coolste Dashboard?
http://apexcompetition.org
APEX Competition: Wer baut das coolste Dashboard?
• Erstellt ein "Dashboard" mit APEX auf vorgegebenen Daten
• APEX-Diagramme, Open Source, D3.js, Reports und mehr
• Gewinner werden auf der APEX Connect 2016 in Berlin geehrt
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Aktuelle Software Release und Patchstände
• Oracle Datenbank 12.1.0.2
• SQL Developer 4.1.3
• node-oracledb 1.6*
• Oracle NoSQL DB 12.1.3.5.2
Datumsverarbeitung in der Oracle-Datenbank
• Datentypen
– DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL
TIME ZONE
• Datumsformate
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Datumsverarbeitung
• Kodierung eines DATE SQL> select sysdate, dump(sysdate) dmp
from dual; SYSDATE DMP ---------------------------
---------------------------------------- 22.02.2016 09:50:36 Typ=13
Len=8: 224,7,2,22,9,50,36,0 1 rows selected.
E0,07 Hex 07E0 2016
Datumsverarbeitung
SQL> select systimestamp, dump(systimestamp) dmp from dual
SYSTIMESTAMP DMP ----------------------------------
--------------------------------------------------------------------
22.02.16 09:54:35,389132000 Typ=188 Len=20:
224,7,2,22,8,54,35,0,224,174,49,23,0,0,3,0,0,0,0,0 1 rows
selected.
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Datumsformate
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Default-Datumsformate sind abhängig von NLS
• Ohne Formatmaske zu arbeiten, ist gefährlich ...
• Andere Session, andere NLS-Settings ...?
SQL> select to_date('22.02.2016') from dual; select
to_date('22.02.2016') from dual * FEHLER in Zeile 1: ORA-01843:
Kein gültiger Monat
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Besser: Explizite Formate verwenden
SQL> select to_date('22-MAR-2016', 'DD-MON-YYYY') DAT from dual;
select to_date('22-MAR-2016', 'DD-MON-YYYY') DAT from dual * FEHLER
in Zeile 1: ORA-01843: Kein gültiger Monat
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Besser: Explizite Formate verwenden
• Explizite Formatmaske und Datumssprache ...
• NLS_DATE_LANGUAGE ist wichtig für ...
– Vollständige und abgekürzte Monatsnamen
– Vollständige und abgekürzte Tagesnamen
– Erster Tag der Woche (bei uns: Montag, in USA: Sonntag)
SQL> select to_date('22-MAR-2016', 'DD-MON-YYYY',
'nls_date_language=''english''') DAT from dual; DAT
--------------------------- 22.03.2016 00:00:00
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
NLS-Unabhängige Datums-Literale: Ja, die gibt es auch!
• DATE-Literal nur für ein Datum ohne Uhrzeit
• TIMESTAMP-Literal
SQL> select TIMESTAMP'2016-01-01 20:00:00.183 CET' as
TS_INDEPENDENT_NLS from dual; TS_INDEPENDENT_NLS
-------------------------------------- 01.01.16 20:00:00,183000000
CET
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Datumsarithmetik
• Klassische Arbeit mit DATE: Addition von Dezimalzahlen SQL>
select sysdate, sysdate + 1 nxt_date from dual; SYSDATE NXT_DATE
------------------- ------------------- 22.02.2016 11:04:29
23.02.2016 11:04:29 SQL> select sysdate, sysdate - 1/48 nxt_date
from dual; SYSDATE NXT_DATE ------------------- -------------------
22.02.2016 11:04:34 22.02.2016 10:34:34 SQL> select sysdate,
sysdate + 1/(24*60) nxt_date from dual; SYSDATE NXT_DATE
------------------- ------------------- 22.02.2016 11:04:57
22.02.2016 11:05:57
Auch mit TIMESTAMP möglich; dann aber
automatische Konvertierung
nach DATE
Datumsarithmetik
• Arbeit mit INTERVAL-Datentyp SQL> select sysdate, sysdate +
INTERVAL '1' DAY nxt_date from dual; SYSDATE NXT_DATE
------------------- ------------------- 22.02.2016 11:04:29
23.02.2016 11:04:29 SQL> select sysdate, sysdate + INTERVAL '30'
MINUTE nxt_date from dual; SYSDATE NXT_DATE -------------------
------------------- 22.02.2016 11:04:34 22.02.2016 10:34:34 SQL>
select sysdate, sysdate + INTERVAL '1' MINUTE nxt_date from dual;
SYSDATE NXT_DATE ------------------- ------------------- 22.02.2016
11:04:57 22.02.2016 11:05:57
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Datumsarithmetik mit INTERVAL-Datentypen
• Aufpassen mit dem MONTH-Interval am Ende eines Monats SQL> --
28.01.2016 SQL> select sysdate, sysdate + INTERVAL '1' MONTH
nxt_date from dual; SYSDATE NXT_DATE -------------------
------------------- 28.01.2016 11:04:29 28.02.2016 11:04:29
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Datumsarithmetik mit INTERVAL-Datentypen
• Aufpassen mit dem MONTH-Interval am Ende eines Monats SQL> --
28.01.2016 SQL> select sysdate, sysdate + INTERVAL '1' MONTH
nxt_date from dual; SYSDATE NXT_DATE -------------------
------------------- 28.01.2016 11:04:29 28.02.2016 11:04:29 SQL>
-- 30.01.2016 SQL> select sysdate, sysdate + INTERVAL '1' MONTH
nxt_date from dual;
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Datumsarithmetik mit INTERVAL-Datentypen
• Aufpassen mit dem MONTH-Interval am Ende eines Monats SQL> --
28.01.2016 SQL> select sysdate, sysdate + INTERVAL '1' MONTH
nxt_date from dual; SYSDATE NXT_DATE -------------------
------------------- 28.01.2016 11:04:29 28.02.2016 11:04:29 SQL>
-- 30.01.2016 SQL> select sysdate, sysdate + INTERVAL '1' MONTH
nxt_date from dual; select sysdate, sysdate + INTERVAL '1' MONTH
nxt_date from dual; * FEHLER in Zeile 1: ORA-01839: Datum für
angegebenen Monat nicht gültig
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Datumsarithmetik mit INTERVAL-Datentypen
Datumsarithmetik: Subtraktion mit DATE
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Datumsarithmetik: Subtraktion mit DATE
• Dezimalzahlen lassen sich umrechnen ...
Copyright © 2014 Oracle and/or its affiliates. All rights
reserved.
Einige Hilfsfunktionen für DATE und TIMESTAMP -1-
• TRUNC: Schneidet Teile des Datums ab – default: TRUNC 'DAY'
– TRUNC('2016-02-22 14:26', 'DAY') '2016-02-22 00:00'
– TRUNC('2016-02-22 14:26', 'HH') '2016-02-22 14:00'
• ROUND: Rundet ein Datum
• EXTRACT: Extrahiert Datumsteile
Einige Hilfsfunktionen für DATE und TIMESTAMP -2-
• NEXT_DAY: Gibt das Datum des nächsten geforderten Wochentags
zurück
– Achtung: NLS_DATE_LANGUAGE ist hier wichtig!
– NEXT_DAY(DATE'2016-02-23', 'DIE') '2016-03-01'
– LAST_DAY (DATE'2016-02-16') '2016-02-29'
– LAST_DAY (DATE'2016-01-16') '2016-01-31'
PL/SQL Challenge – schon gespielt?
Oracle Developer Monthly – ab sofort on Demand
http://tinyurl.com/oradevmonthly
Nächster Oracle Developer Monthly
Nächster Oracle Database Monthly
#oradevmonthly