Oracle 26ai Feature Häppchen für Developer

Shownotes

Oracle 26ai Feature Häppchen für Developer

Vier kleine Features, die lange genervt haben

Manchmal sind es die kleinen Dinge, die den Alltag besser machen. Robert Marz bringt Johannes Ahrends in dieser Häppchen-Folge ein paar Developer-Features aus Oracle 26ai mit. Alles Sachen, die lange gefehlt haben und jetzt endlich da sind.

Den Anfang macht IF NOT EXISTS und IF EXISTS für CREATE und DROP TABLE. Wer Skripte schreibt, die immer wieder laufen sollen, musste bisher umständlich abfangen, wenn eine Tabelle schon da war oder eben fehlte. Robert zeigt, warum das bei DROP ein Segen ist und warum man bei CREATE TABLE IF NOT EXISTS trotzdem vorsichtig sein sollte, denn geänderte Spalten werden dann einfach ignoriert.

Weiter geht es mit einem echten Boolean-Datentyp in SQL-Tabellen. Schluss mit der Einzeichenspalte voller J, N, Y und 0. Oracle übernimmt die Umwandlung, und nebenbei klären die beiden, was die dreiwertige Logik mit NULL macht. Danach das Ende einer Ära: Der Pflicht-FROM mit der DUAL-Tabelle ist Geschichte, ein SELECT ohne FROM ist jetzt erlaubt. Und zum Schluss der native JSON-Datentyp. Sein Speicherformat OSON ist offengelegt: Der Aufbau des OSON-Formats steckt quelloffen in den Thin Drivern für Python und JavaScript.

Die Kernbotschaft ist größer als die einzelnen Features. Oracle nutzt den technischen Vorsprung und räumt endlich auf, holt nach, was andere Datenbanken länger können, und hört auf die Entwickler.

Diese Folge in der Übersicht:

  • IF NOT EXISTS und IF EXISTS für CREATE und DROP TABLE, endlich saubere und wiederholbare Skripte.
  • Vorsicht bei CREATE TABLE IF NOT EXISTS: Eine geänderte Tabellendefinition wird stillschweigend ignoriert.
  • Ein echter Boolean-Datentyp in SQL-Tabellen. Oracle übernimmt die Umwandlung von J, N, 0 oder 1.
  • Dreiwertige Logik: Was passiert, wenn der Wert NULL ist.
  • Das Ende des Pflicht-FROM: SELECT ohne FROM DUAL. Die Tabelle bleibt, man braucht sie nur nicht mehr.
  • Der native JSON-Datentyp. Der Aufbau des OSON-Speicherformats ist über die Python- und JavaScript-Thin-Driver quelloffen, nicht der Datentyp selbst.
  • Ausblick auf weitere Häppchen: Defaults on Null, SQL Domains, Annotations, RETURNING mit Old und New sowie ein aufgebohrtes GROUP BY mit GROUP BY ALL und Aliasen.
  • Kernbotschaft: Die kleinen Quality-of-Life-Features sind so wichtig wie die großen Headline-Features.

Weiterführende Links und Ressourcen:

Die Podcast-Hosts und Director:

  • Johannes Ahrends: Oracle ACE, DBA, ora2know. Web: carajandb.com
  • Robert Marz: Oracle ACE, IT-Architect, ora2know. Web: robbie.databee.org
  • Oliver Pyka: Oracle ACE, Freiberufler, ora2know. Web: pyka.de

Über O wie Datenbank:

Der deutschsprachige Oracle-Datenbank-Podcast von ora2know. Johannes Ahrends, Robert Marz und Oliver Pyka bringen zusammen über 90 Jahre Oracle-Erfahrung mit und sprechen alle vier Wochen über das, was DBAs, Entwickler und IT-Entscheider wirklich bewegt: Migration, Architektur, neue Features, Betrieb und Strategie rund um die Oracle Datenbank. Praxisnah, meinungsstark und ohne Marketing-Sprech.

Über ora2know:

Wissen teilen, Netzwerk aufbauen. ora2know ist eine unabhängige Community für Oracle-Datenbank-Administratoren und -Entwickler im deutschsprachigen Raum. Unser Ziel ist der praxisnahe Austausch von Wissen und Erfahrungen rund um Oracle Database, Oracle APEX und Oracle AI. Ohne kommerzielle Interessen, getragen von Enthusiasmus und gegenseitiger Hilfe. Ob DBA, Entwickler oder Architekt: ora2know verbindet Oracle-Profis in Deutschland, Österreich und der Schweiz.

Über diese Podcast-Produktion:

Dieser Podcast ist eine TON.EINS Produktion.

Transkript anzeigen

00:00:03:

00:00:10: Moin Robert, du hast uns heute ein paar Häppchen mitgebracht.

00:00:13: Ich glaube es geht um Orake-Sechsundzwanzig und die neuen Features für SQL, PLSQL und was da alles drumherum ist oder?

00:00:32: Wenn ich nicht existiere, dann existiere ich doch.

00:00:35: oder wie man sagen würde if not exist?

00:00:37: Genau.

00:00:38: Das nervt jeden der Deploymentskripte schreibt.

00:00:41: Stell dir vor du hast ein Skript das eine Tabelle anlegt.

00:00:44: Jetzt bleiben wir heute mal bei einem Beispiel.

00:00:46: Wir machen zum Beispiel eine Tudu-Anwendung und legen ne Tabelle CreateTableTudo an Und die möchte ich vorher wegschmeißen damit ich sicher bin dass ich die aktuelle Version bekomme.

00:00:56: und dann sage ich im Drop Table Tudos.

00:00:59: Und bislang hat Oracle immer gesagt, wenn die Tabelle nicht da ist und du sie aber wegschmeißen willst das muss irgendwie ein Fehler sein.

00:01:04: Und hat uns dann auch einen Fehler rausgegeben was ja grundsätzlich auch richtig ist.

00:01:09: Aber Wenn wir in einem Diplomentskript sind was automatisiert immer wieder laufen soll muss man halt umständlich Fehler abfangen.

00:01:15: und dann hat man so Wirkenrauns gebaut dass man PLSQL Blöcke drumherum gebaut hat oder vorher geguckt hat ist die tabelle überhaupt da und das raus selektiert hat usw.

00:01:25: Das war einfach unschön.

00:01:27: Andere Datenmanken haben das schon lange und Oracle kann jetzt auch endlich sagen Droptable if Exists.

00:01:32: Okay, das heißt aber auf der anderen Seite was passiert denn ja wenn ich die in Create Table mache If Exist oder If Not Exist funktioniert das genauso?

00:01:41: Geht es genau so gut?

00:01:42: oder was muss man dabei beachten?

00:01:44: Das ist richtig.

00:01:45: also das geht dann beide Richtung.

00:01:46: Es gibt ein create table of not exist und dann drop table if exists Und beide liefern als Ergebnis hinten dran.

00:01:54: immer die vieler Meldung hat geklappt auch wenn der zum Beispiel beim Drop gar nicht weggeschmissen hat?

00:01:59: Das heißt, weil er an dieser Stelle noch gar nicht existiert, kriegst du beim Drop normalerweise eine Fehlermeldung und jetzt if not exists sagt er halt okay die existiert nicht ignoriere ich völlig.

00:02:09: oder wie ist das zu meinen.

00:02:10: Genauso!

00:02:11: Du kriegste immer die Bestätigungsmeldungen.

00:02:13: Ich habe die Tabelle wegggeschmissen auch wenn er gar nichts getan hat.

00:02:16: Das ist zwar streng logisch falsch, aber für Skripte die durchlaufen einfach am besten zu handeln.

00:02:21: und damit hat man sich darauf geeinigt das genauso zu machen.

00:02:24: Weil das Ergebnis ist ja das was ich haben will.

00:02:26: Die Tabelle ist anschließend nicht da.

00:02:27: Okay bei Nicht Da kann ich mir das vorstellen wie es ist denn wenn eine Tabelle existiert?

00:02:32: Das heißt ich sage create table if not exist.

00:02:36: Das klingt zwar gut aber was passiert wenn sich die Tabelle eigentlich in der Zwischenzeit geändert hat oder meine Definition geändert hat.

00:02:43: Das ist ein großes Problem, deswegen rate ich tatsächlich auch davon ab das zu machen weil wenn du sagst create table if not exist wird der Befehl nur ausgeführt wenn die Tabelle tatsächlich nicht da ist.

00:02:53: Wenn du jetzt aber einen Create Skript hast was zum Beispiel andere Spalten in der Tabelle mit drin hast dann wird es einfach nicht ausgeführt weil die Tabellen ja schon da sind.

00:03:00: und dann hast du nachher erwartest Du eigentlich das Ergebnis von deinem skript.

00:03:04: Aber die tabelle hat sich nicht verändert und das ist ein bisschen doof.

00:03:07: Deswegen ist es schlau, die Tabelle wegzuschmeißen mit Nodexist und dann neu anzulegen vorne dran.

00:03:12: Okay das ist ein guter Hinweis weil ich kann mir vorstellen dass du sonst gegebenenfalls Fehlermeldung kriegst ganz viel weiter im Skript unten, weil dein Create Table falsch war und der Skripton darauf natürlich wieder aufsetzt klar?

00:03:25: Bichtig!

00:03:25: Ok das war's zum IfNodeXist.

00:03:28: kommen wir zur zweiten Häppchen.

00:03:30: Es gibt jetzt endlich einen Boolean-Datentyp.

00:03:33: Das kann doch gar nicht sein.

00:03:35: Ja, das haben sich tatsächlich ganz viele gedacht.

00:03:36: Dass Oracle das nochmal macht, dass wir in SQL endlich einen Bulliendatentyp kriegen.

00:03:41: Also im PLSQL haben wir den ja schon lange aber in Tabellen da hat man ja eigentlich immer ordentlich Schar-Spalten angelegt also ein Zeichen Spalten wo man dann was reingeschrieben hat

00:03:51: Genau N und J und Y und X. Und was weiß ich nicht, was für Iberia ...

00:03:56: Genau!

00:03:56: Wenn man mit spanischen Kollegen hat, dann hat man einen S für C drin gefunden und ein N für NO und mit allen möglichen Sonderbehandlungen.

00:04:03: Die Zeit ist jetzt endlich vorbei?

00:04:05: Ich kann endlich hergehen und keine Tabelle definieren und sagen diese Spalte ist vom Typ Bullien und dann kann ich da reinschreiben, was ich will also Was sinnvoll klingt und Oracle macht das dann für mich und speichert den richtigen Wert ab.

00:04:18: Okay,

00:04:19: d.h.,

00:04:19: also nicht dass ich jetzt sagen muss, es ist true and false?

00:04:23: Sondern ich könnte auch ja-und nein machen

00:04:25: oder null und eins!

00:04:26: Und das muss ich nicht

00:04:27: definieren?!

00:04:27: Nein, das macht Oracle für uns im Rahmen des.

00:04:30: natürlich kann Ich mir nicht Dinge ausdenken und dann hoffen, dass da schon gut geht.

00:04:33: aber in den Werten die man erwartet macht oracle das für uns richtig.

00:04:38: Also y und n, j und N, null und Eins, True und False, das kriegt Oracle richtig hin.

00:04:44: Gibt es auch ein automatisches True, so wie bei einer If-Anweisung?

00:04:47: Bei der Shell.

00:04:48: Dass ich sage, teste mir das auf irgendwas und es sagt automatisch true, gibt's das?

00:04:55: Nee, das gibts nicht!

00:04:56: Weil in der SQL-Welt haben wir ja nicht nur True & Fals und Ja und Nein sondern da haben wir eine dreivärtige Logik.

00:05:03: Da kommt ja der Nallwell jo noch mit dazu.

00:05:05: Das heißt wenn du nichts angibst dann geht die Datenmank davon aus dass du Nallen meinst.

00:05:09: Und Nallen meint weiß ich nicht und weiß ich nicht, wird dann auch als Weißig nicht behandelt.

00:05:13: Und dann weiss die Datenmang nicht was er tun

00:05:16: soll.".

00:05:16: Okay das macht Sinn!

00:05:17: Dafür kannst du dich entscheiden ob du es groß oder klein schreiben willst?

00:05:21: Also da sieht die Datenbank großzügig drüber hinweg.

00:05:23: also ob du ein großes Y oder ein kleines Y nimmst wurscht.

00:05:26: Ok dass ist so etwa siebziger, achtziger Jahre wo man mit Oracle angefangen hat.

00:05:31: Dann war auch großen Kleinschreibung egal.

00:05:33: Also insofern sind wir dahin zurück

00:05:36: Richtig genau.

00:05:37: Gut, neben dem True und Falls und If Not Exist gibt es eine Tabelle die ich ganz besonders mag.

00:05:42: Die Dual-Tabelle.

00:05:43: weil egal was man da reinschreibt es kommen immer X raus.

00:05:47: beziehungsweise wenn man etwas sucht in der Tabelle dann kommt immer irgendwas heraus was ich sowieso erwartet habe.

00:05:52: Eine ganz tolle Tabelle aber die brauchen wir jetzt nicht mehr oder die gibts gar nicht mehr?

00:05:56: Oder wie sieht das aus?

00:05:57: Geben tut's die noch.

00:05:58: Dual ist so ne Sonderlocke von Oracle bei Oracle den SQL Standard früher sehr genau interpretiert hat und da steht halt drin, dass es einen Select ohne Form nicht geben darf.

00:06:08: Und das heißt wenn ich nur eine Funktion selektieren möchte und keine Spalten muss ich halt trotzdem in den Form hinschreiben und nach dem Form darf ein Select Statement auch nicht aufhören.

00:06:16: also braucht man noch irgendeine Tabelle und die hat orake dual genannt.

00:06:21: Warum Dual?

00:06:21: Weil da eine Zeile, eine Spalte, eine Zeil, ein Wert... Da steht nämlich die Spalter heißt dummy und der Wert heißt x Und damit kann man rumselektieren.

00:06:30: Bis Oracle neun war es so, dass das eine physische Tabelle war.

00:06:34: Die konnte man da tatsächlich auch wegtroppen und hat damit eine ganze Anwendung zerstören können.

00:06:38: Man hatte auch Zahlen reininsorten können, damit hat man die Anwendungen noch mehr kaputt machen können weil dann auf einmal immer zwei Zeilen zurück kamen wenn wir nur eins haben wollten.

00:06:45: Das hat Oracle irgendwann glaube ich mit Oracle zehn abgeschafft und hat das tatsächlich als virtuelle Tabelle gemacht.

00:06:51: Jetzt kaum... Die Dual-Tabelle ist endlich Geschichte.

00:06:58: Sie ist immer noch da, man kann sie genauso verwenden aber ich muss nicht mehr.

00:07:02: Ich schreibe jetzt SELECT SYSTATE anstelle SELECTSYSTATE vom Dual.

00:07:08: Neulich in einem Postgres-Projekt gearbeitet und da waren mit verschiedenen anderen Orakeln Entwicklern zusammen.

00:07:14: Und da war der Postgres DBA so genervt, dass er für die Oracleentwickler eine Dualtabelle angelegt hat weil die das immer automatisch geschrieben haben.

00:07:21: Vielleicht gewöhnt man sich dann jetzt auch endlich dran, dass wir es nicht mehr brauchen.

00:07:24: Okay aber das bedeutet nicht für ne Anwendung für die auf Zerahre und Zwanzig beziehungsweise sechsundzwanzig geht dass die dann nicht mehr funktioniert, was die Dualtabelle nicht gibt.

00:07:32: Ich

00:07:32: glaube das hätte Oracle nicht machen können.

00:07:34: also es gibt so viele Millionen Skripte wo das Dualskript drin ist.

00:07:37: deswegen... Das Dual ist noch da aber ich brauch's nicht mehr und ich für meinen Teil muss sagen das war eines von den Features wo ich mich am allerschnellsten dran gewöhnt hab das einfach nicht mehr schreiben zu müssen.

00:07:46: Ja das kann ich ihr nachvollziehen!

00:07:47: Das klingt eigentlich nach einer absoluten Kleinigkeit und nicht der Redewert oder?

00:07:51: Das stimmt das is ne Kleinigkeit Aber es ist ein Signal.

00:07:54: Oracle fängt nach vielen, vielen Jahren endlich an Dinge zu entfernen die Entwickler seit Jahrzehnten im Wege stehen und damit wollen sie auch das Signal setzen.

00:08:03: wir wissen was euch nervt und wir ändern es langsam aus sich.

00:08:05: Das ist auch bei vielen anderen Stellen und ich finde das kulturell wichtiger als das Feature selbst einfach dass Oracle sich anfängt einen Entwickler und seine User wirklich anzunähern und auf Sie zu hören.

00:08:16: Ja genau ich habe auch das Gefühl Version sixundzwanzig ist so eine wo ein bisschen aufgeräumt worden.

00:08:22: Wir haben bessere Fehlermeldungen und auch andere Sachen.

00:08:25: Also insofern, da hast du sicherlich ganz recht das Oracle hier anfängt ein bisschen der Allgemeinheit zu dienen hätte ich was gesagt.

00:08:48: zu integrieren und das finde ich eine sehr gute Idee.

00:08:55: Dann kommen wir zu einem Lieblingsthema von dir, das ist Jason.

00:08:58: da schwärmst du ja richtig für oder?

00:09:00: Genau wer ist denn eigentlich dieser Jason und was macht der in meiner Datenbank?

00:09:04: Oracle hat endlich die native jason Unterstützung mit eigenem Datentyp.

00:09:08: Da zieht sie zu anderen Datenmanken gleich.

00:09:10: also es gibt ja Datenmanten die ausschließlich Jason haben sowas wie Mongo.

00:09:14: aber auch Postgres hat schon lange einen eigenen Datentypen auch einen Datentyp, wo ich JSON speichern kann der auf JSON optimiert ist.

00:09:22: Ich muss es also nicht mehr in Textspalten speichert sondern kann direkt JSON als JSON-Datentyp haben.

00:09:28: Okay und das gibt's erst seit XXVI,

00:09:30: d.h.,

00:09:31: ganz neu?

00:09:32: Naja technisch gesehen gibts das mit seit Oracle einundzwanzig aber einund zwanzig war ja nur so ein Zwischenrelease, dass nutzt ja keiner, also das ist jetzt neu mit allem mit XXVI Ja.

00:09:42: Und das ist sehr orakeproprietär, was gehe ich von aus.

00:09:45: zumindest Alles was Bislang bei Oracle war, war sehr proprietary.

00:09:49: Aber ich glaube du hörst die Frage schon an dich habe mich ein bisschen schlau gemacht und es scheint so zu sein dass Oracle da einen anderen Weg geht oder?

00:09:56: Es

00:09:56: ist Oracle proprietary, es nutzt nur Oracle aber es ist Open Source.

00:10:00: das heißt sie haben die die Implementierung von einem Datentyp tatsächlich als Open Source veröffentlicht und man kann sich das angucken Und das ist tatsächlich eine neue Weg den Oracle geht.

00:10:09: Das gibt es nicht bei vielen andern Sachen.

00:10:11: Okay und wie ich Oracle kenne ist das natürlich viel besser als was alle Anderen haben oder

00:10:16: Oracle war ja late to the game.

00:10:18: Das heißt, die waren die allerletzten, die das jetzt gemacht haben und haben diese Chance aber genutzt und haben einfach geschaut was lief bei den anderen Datenmanken gut Und was nicht so sehr und haben nur die besten Teile zusammengenommen und haben damit ihren eigenen Datentyp zusammengebaut.

00:10:31: Aber ich denke mal damit ist es nicht getan.

00:10:34: dass heißt Es gibt noch viele neue andere Sachen in Jason auf die wir sicherlich nochmal eingehen müssen.

00:10:40: über jason kann Ich Ewig lang reden und wie ich denke, wir werden mehr als eine Folge noch machen wo wir uns mit diesen JSON Features auseinandersetzen.

00:10:48: Da gibt es ja so Dinge wie Duality Views die die Relationalen und die JSON Welt gleichzeitig abbilden Und das gibt jede Menge JSON Feature.

00:10:57: Aber das würde den Rahmen von Häppchen heute wirklich springen.

00:10:59: Das ist ein ganzes Menü.

00:11:01: Dann schauen wir doch mal was wir noch zu machen könnten.

00:11:03: Es gibt noch einige Themen die offen sind.

00:11:06: Hast du noch ein paar Tisa dafür?

00:11:08: jede Menge.

00:11:09: Wir könnten zum Beispiel Default und Null nehmen, das heißt dass wir die Default-Werte in Tabellen reinschreiben auch wenn ich eigentlich Null reinschreibe möchte.

00:11:17: ob das ein Feature im Backes oder gut ist muss man dann darüber diskutieren.

00:11:21: Wir haben Sequel Domains und Annotations, Returning Old and New by Update & Delete so viele Sachen.

00:11:28: da müssen mal nicht nur neue Folgen sondern auch den Blog nochmal neu machen.

00:11:31: aber ja.

00:11:32: Ja und dann gibt es noch eins was du noch ausgelassen hat.

00:11:34: das Group By kriegt ja wohl einen ganz neuen Stellenwert bei ORAKE-Sektsundzwanzig.

00:11:39: Es gibt jetzt endlich dann auch die Möglichkeit da nicht nur auf die eigentliche Formel einzugeben, sondern zu sagen Group by alle zum Beispiel?

00:11:49: Ja und nicht nur das!

00:11:49: Du kannst auch endlich Group By Alias machen.

00:11:51: also du musst nicht den Funktionsafroof hinschreiben, sondern du kannst den Kurznamen, den du im Select vergeben hast auch unten reinschreiben.

00:11:59: Auch wieder so eine Kleinigkeit aber auch wieder eins von dem Featuren wo man sagt Endlich ist es da und endlich ist es bequemer.

00:12:05: Da sind jede Menge neue Fakten, die uns XXX jetzt bietet.

00:12:09: Wie ist denn deine Hauptbotschaft für heute?

00:12:12: Na ja, die Hauptboteschaft ist Oracle XXXII nicht nur Multi-Tenant und KI.

00:12:17: Im Alltag sind es die kleinen Dinge, die den Unterschied machen.

00:12:19: Oracle wird entwickelerfreundlicher – das ist mindestens so wichtig wie die großen Headline Features!

00:12:24: Danke fürs Zuhören.

00:12:25: Es wäre toll wenn ihr uns abonniert.

00:12:27: Weitere Informationen über diesen Podcast und Order to Know Community findet ihr in den Show Notes.

00:12:33: Bis bald Tschüss!

Neuer Kommentar

Dein Name oder Pseudonym (wird öffentlich angezeigt)
Mindestens 10 Zeichen
Durch das Abschicken des Formulars stimmst du zu, dass der Wert unter "Name oder Pseudonym" gespeichert wird und öffentlich angezeigt werden kann. Wir speichern keine IP-Adressen oder andere personenbezogene Daten. Die Nutzung deines echten Namens ist freiwillig.