Unit Test für Object Types in SQLDeveloper

SqlDeveloper ist eine kostenlose IDE von Oracle für SQL und PL/SQL Entwicklung, sowie Verwaltung der Datenbank. Mitlerweile befindet es sich in der Version 3.0. Leider gibt es in der Version immer noch keine Unterstützung der Unittests für object types. Dies ist ein sehr wichtiges Feature, wer in Oracle objektorientiert programmiert und somit sehr oft Types verwendet.
Dieses Feature wurde bei Oracle angefordert und für Release 3.0 eingeplant, doch bis jetzt ist noch nichts passiert. Bitte Voted für das Feature, damit es auch realisiert wird und der Entwicklung.
Zum Feature request
wiki über SqlDeveloper
Download SqlDeveloper 3.0

PL/SQL Challenge vom 31.03.2011

Es war eine super Frage von Jeff Kemp in dem gestrigen PL/SQL Challenge. Die Frage war kurz und verständlich und zwar
was kommt raus?

DECLARE
   d1   DATE := TO_DATE ('09/2011', 'MM/YYYY');
   d2   DATE := TO_DATE ('10/2011', 'MM/YYYY');
   v1   VARCHAR2 (10);
   v2   VARCHAR2 (10);
BEGIN
   v1 := TO_CHAR (d1, 'Month');
   v2 := TO_CHAR (d2, 'Month');

   DBMS_OUTPUT.put_line (
      CASE
         WHEN v1 = 'Sep' AND v2 = 'Oct' THEN 'Short and Sweet'
         WHEN v1 = 'September' AND v2 = 'October' THEN 'Long and Sour'
         ELSE 'Not Short and Not Long'
      END);
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line ('Something else entirely');
END;

Auf den ersten Blick sieht der Code recht simpel aus, so dachten ich mit den Arbeitskollegen auch. Ohne das ganze auszuprobieren, wusste ich, dass TO_CHAR (d1, ‘Month’); den vollen Monatsnamen zurückgibt. So war die Variante mit ‘Short and Sweet’ ganz klar ausgeschlossen. Da wir aber eine deutsche Session benutzen, würden wir statt, October, Oktober zurückbekommen.
So habe ich mir überlegt, wenn der Autor nicht erwähnt hat, dass es explizit die englische Session sein müsste, wird ein rerank geben.
Mit Kollegen haben wir zuerst auch nur das Session Problem ausdiskutiert, und haben auf rerank gehoft.
Der Hacken war aber woanders, nämlich wird beim Format ‘month’ in der to_char Funktion, der String auf die Länge 9 gepadded im oberen Beispiel, und somit scheitert beim Vergleich von v2 = ‘October’, da v2 := ‘October ‘ und somit in dem ELSE Zweig landet.

Echt erstaunlich, was es für Kleinigkeiten in einer Sprache geben kann, die man nicht kennt, und evnt. später nicht beachtet.

PL/SQL Challenge von 01.10.2010

Ich hatte ja schon geschrieben, dass ich an dem PL/SQL Challenge. Und heute war wieder die Beginner Frage die uns allen, bzw. den meisten Sorgen bereitet hat. Die Frage war recht einfach, doch welche Antwort soll man den wählen.

Ich hatte die beiden unteren angekreuzt, da ich da nach 5 Minuten hinschauen kein Unterschied bemerkt habe. Doch es gibt ein Unterschied. Wenn man genauer hinschaut heißt es bei dem oberen CURSOR cur AS und bei dem unteren CURSOR cur IS.
AS ist natürlich schwachsinnig, aber so schnell kann man es nicht sehen, da kriegt man schon Augenkrebs:)
Aufjedenfall eine blöde Frage zum Monatsanfang.

PL/SQL Challenge Freitag 17 September 2010

Kennt Ihr schon das tägliche PL/SQL Challenge von Steve Feuerstein. Da ich schon seid knapp einem halben Jahr als Datenbankentwickler arbeite und wir Oracle einsetzen, programmieren wir auch in PL/SQL.

Zum Üben und damit der Arbeitstag nicht immer langweilig ist, nehmen wir an dem Challenge teil. Macht wirklich Spass!
Man bekommt Punkte, je nach dem wie schnell man geantwortet hat und was für ein Level der Frage es war(Bginner, Intermediate, Advanced). Die besten können auch Preise gewinnen, wie z.B. Amazon Gutschein oder Ebook.

Ich muss aber echt sagen, dass die Beginner fragen manchmal echt schwerer vorkommen als die Advanced… Aber vielleicht kommt es ja nur so vor:)

Heute war z.B folgende Beginner Frage:

PL/SQL Challenge 17092010

Wenn man schnell Punkte machen möchte, dann kann man bei dieser Frage wirklich einiges falsch machen:) Aufmerksamkeit war gefragt… Vieles Sieht richtig aus, aber es sieht eben nur so aus. Durch Ausschlussverfahren bin ich auf die Antwort 2 gekommen, die ist auch als einzige richtige Lösung.

In der ersten ist der Datentyp falsch, in der zweiten ist die Variable nicht deklariert, beides eigentlich leicht zu übersehen. Und  in der letzten Variante ist die Funktion, NEXTVAL,  nicht vorhanden in der Sprache.
Fast hätte ich die ersten 3 Angekreuzt 🙂