Erweiterte Möglichkeiten für die PL/SQL-Entwicklung


Herzlich willkommen zu einer neuen Ausgabe unseres vierteljährlich erscheinenden Newsletters Keeping in Touch. Wir möchten Ihnen heute einige neue Features der Version 12.1.1 vorstellen, die im September 2016 freigegeben wurde.

KeepTool 12.1.1 ist vollständig kompatibel mit der Windows 10 Anniversary Edition.

Unterstützung für NLS_LENGTH_SEMANTICS auf der PL/SQL Seite

Die im Folgenden beschriebenen Verbesserungen betreffen den Parameter NLS_LENGTH_SEMANTICS. Der Parameterwert bestimmt, ob PL/SQL-Objekte durch Oracle mit BYTE oder CHARACTER Semantik übersetzt werden.

Wir betrachten dazu ein einfaches Beispiel. Im Schema KTDBA gibt es das folgende Package:

1-packagae-source-code

Auf der PL/SQL-Übersichtsseite können wir sehen, dass dieses Package, im Gegensatz zu den anderen, CHARACTER-Semantik benutzt:

2-pl-sql-overview

Nehmen wir an, dass auf die öffentliche Package-Konstante GLOBAL_KEY auch von anderen Oracle-Benutzern zugegriffen wird. Das Package wurde mit CHAR-Semantik übersetzt, nachdem ein entsprechender ALTER SESSION Befehl ausgeführt wurde. Das bedeutet, dass für die Definition von GLOBAL_KEY als VARCHAR2(13) nun auch 13 Zeichen reserviert sind.

Um das Verhalten mit Sonderzeichen zu demonstrieren, wurden Umlaute und andere Symbole aus dem europäischen Sprachraum verwendet.

Nun nehmen wir an, dass ein anderer Oracle-Benutzer “HR1” eine Prozedur SHOW_GLOBAL_KEY mit BYTE-Semantik angelegt hat, da er die Standardeinstellung der Datenbank benutzt hat. Diese Prozedur gibt ein paar Informationen zum Zeichensatz sowie die Länge der lokalen Variablen L_GLOBAL_KEY aus, die mit „13“ definiert wurde:

3-procedure-source-code

Beim Ausführen bekommen wir den folgenden Fehler:

4-call-interface-error

In Quelltextzeile 16 kommt es zu einem Fehler beim Versuch, die aus 13-Zeichen bestehende Zeichenkette aus dem Package von KTDBA der lokalen Variable mit einer Länge von 13 Bytes zuzuweisen.

Die Lösung des Problems ist denkbar einfach. Nach Änderung des Session-Parameters

ALTER SESSION SET NLS_LENGTH_SEMANTICS = CHAR;

und anschließendem Neu-Übersetzen der Prozedur lässt sich das Problem ohne Quelltextänderung lösen, wie in der folgenden Hardcopy zu sehen ist.

5-output-window

Die Byte-Länge der Zeichenkette beträgt 21, da jedes Zeichen mit Accent im AL32UTF8- Zeichensatz 2 Bytes und das Euro-Symbol sogar 3 Bytes beansprucht. Die anderen 6 Zeichen benötigen jeweils nur 1 Byte.

Das Beispiel zeigt, dass es sehr wichtig ist, auf die NLS_LENGTH_SEMANTICS-Einstellung zu achten, insbesondere wenn PL/SQL-Code aus einem anderen Schema benutzt wird, da die Parameter-Einstellung beim Übersetzen des Packages übernommen wird.

Hora zeigt auf der PL/SQL-Seite und auf der TYPES-Seite, welche NLS_LENGTH_SEMANTICS-Einstellung beim Übersetzen des Packages verwendet wurde und damit wirksam ist.

6-types

Im obigen Beispiel definiert der PHONE_LIST_TYP ein VARYING ARRAY mit Elementen zu je 25 BYTEs.

Auch das Reverse DDL Tool wurde angepasst. Die Einstellung der aktuellen Session für NLS_LENGTH_SEMANTICS wird in das Skript übernommen:

7-reverseddl

 

Hervorhebung von Fehlern in PL/SQL – Quelltexten

Bereits seit der vorigen KeepTool-Version werden fehlerhafte PL/SQL-Quelltextzeilen durch eine rote Markierung vor der jeweiligen Zeile hervorgehoben. Insofern sich der fehlerhafte Quelltextbereich gerade im sichtbaren Scrollbereich des Editorfensters befindet, lassen sich damit die fehlerhaften Codezeilen schnell lokalisieren. Die Visualisierung der neuen KeepTool-Version unterstützt jetzt auch das Auffinden von PL/SQL-Fehlern in größeren Quelltexten außerhalb des gerade dargestellten Scrollbereichs. Im nachstehenden Beispiel befindet sich der Fehler viel weiter unten in Zeile 198:

1-procedure-code-error

Zum Auffinden des Fehlers genügt es, den Scrollbar soweit nach unten zu ziehen, dass die graue Ausschnittsmarkierung die rote Fehlerpositionsmarkierung überdeckt.

1-procedure-code-error-2

Diese Form der Darstellung gibt es außer auf der PL/SQL-Seite auch für Datenbanktrigger.

Erleichterte Navigation zwischen Methoden innerhalb von Package Bodies

Hora 12.1.1 führt eine zusätzliche Möglichkeit zur Navigation zwischen Methoden von Package Bodies ein. Schauen wir dazu beispielhaft auf einen Package Body im SYS-Schema:

navigation

Sie können jetzt mittels Ctrl + Click so ähnlich wie bei einem Hyperlink auf einer Webseite zwischen allen Prozeduren des Packages navigieren, die Sie auch im Navigator links des Quelltextfensters sehen.

Hora 12.1.1 stellt jetzt öffentliche und private Methoden mit unterschiedlichen Symbolen im Navigator dar. Im Beispiel wird die lokale Funktion TO_CHAR (verschachtelt innerhalb von FORMAT_CELL) mit einem grauen Aufzählungszeichen dargestellt, während öffentliche Methoden mit einem blauen Symbol gelistet werden.

Weitere Neuerungen sind in den Release Notes beschrieben, die Sie in der Anwendungshilfe und auf der KeepTool Webseite unter https://keeptool.com/release-notes/ finden.

Für diesen Newsletter haben wir verschiedene Punkte ausgewählt, die alle das Thema PL/SQL-Code betreffen. Wir würden uns freuen, wenn Sie sich die neuen Features auch in Ihrer eigenen Anwendung anschauen und diese Ihnen an der einen oder anderen Stelle die Arbeit erleichtern. Berichten Sie uns von Ihren Erfahrungen!

Im Januar 2017 werden wir in unserem nächsten Newsletter wieder über einige hilfreiche aber weniger bekannte KeepTool-Features berichten, die Sie bei Ihrer täglichen Arbeit mit Ihrer Datenbank unterstützen können. Bis dann!