Bug in Mixed Compilation Modus in Oracle11.2

Vor einiger Zeit bin ich auf ein seltsames Verhalten in Oracle 11.2.03 gestoßen. Wenn der Code entweder Native oder Interpreted kompiliert ist, läuft alles super. Doch mischt man die beiden, so kommt es vor, dass die Exceptions verschluckt werden.
Da ich in Oracle auch OO Programmiere habe ich ein Beispiel mit den Object Types konstruiert um das Problem nachzustellen.
Folgende ausgangssituation:
Ich habe Zwei Object Types. Der eine erbt von dem anderen.

-- Object Type 1
CREATE OR REPLACE TYPE TYPE1 force AS OBJECT
(
id NUMBER
,constructor FUNCTION TYPE1 RETURN SELF AS RESULT
,constructor FUNCTION TYPE1(IN_ID IN NUMBER) RETURN SELF AS RESULT
) NOT final;
/
CREATE OR REPLACE
TYPE BODY TYPE1 AS

  constructor FUNCTION TYPE1 RETURN SELF AS RESULT AS
  BEGIN
    /* TODO Implementierung erforderlich */
    RETURN ;
  END TYPE1;

  constructor FUNCTION TYPE1(IN_ID IN NUMBER) RETURN SELF AS RESULT AS
  BEGIN
    /* TODO Implementierung erforderlich */
    SELF.ID := IN_ID;
    RETURN ;
  exception
    WHEN others THEN
      dbms_output.put_line('Fehler!');
  END TYPE1;

END;
/

--Object Type 2
CREATE OR REPLACE TYPE TYPE2 force UNDER TYPE1
(
name varchar2(3)
,constructor FUNCTION TYPE2 RETURN SELF AS RESULT
,constructor FUNCTION TYPE2(in_name IN varchar2) RETURN SELF AS RESULT
) NOT final
/
CREATE OR REPLACE
TYPE BODY TYPE2 AS

  constructor FUNCTION TYPE2 RETURN SELF AS RESULT AS
  BEGIN
    /* TODO Implementierung erforderlich */
    RETURN ;
  END TYPE2;

  constructor FUNCTION TYPE2(in_name IN varchar2) RETURN SELF AS RESULT AS
  BEGIN
    /* TODO Implementierung erforderlich */
   
    SELF.NAME := in_name;
   
    RETURN ;
  exception
    WHEN others THEN
      dbms_output.put_line('Fehler!');
  END TYPE2;

END;
/

Im ersten Fall, wenn der Code in einem bestimmten Typ kompiliert ist, funktioniert alles wunderbar. Wir kompilieren als Native und instanzieern dann ein Object mit einem falschem Wert.

ALTER TYPE TYPE1 compile specification PLSQL_CODE_TYPE = NATIVE;
ALTER TYPE TYPE1 compile body PLSQL_CODE_TYPE = NATIVE;
ALTER TYPE TYPE2 compile specification PLSQL_CODE_TYPE = NATIVE;
ALTER TYPE TYPE2 compile body PLSQL_CODE_TYPE = NATIVE;
SET serveroutput ON;
DECLARE
  t type2;
BEGIN

  dbms_output.put_line('Start Test1');
  t := type2(in_name=>'ABCD');
  dbms_output.put_line('End Test1');
exception
 WHEN others THEN
   dbms_output.put_line('Error Test1');
END;
/

In diesem Fall verhält sich das System wie erwartet und man bekommt folgende Ausgabe.

Start Test1
Fehler!
Error Test1

Das Programm bricht also ab und die Zeile End Test1 wird nicht ausgegeben.
Wenn der Code in gemixter Form kompiliert wird, so verhält sich dieser Komplet anderes.

alter type TYPE1 compile specification PLSQL_CODE_TYPE = INTERPRETED;
alter type TYPE1 compile body PLSQL_CODE_TYPE = INTERPRETED;
alter type TYPE2 compile specification PLSQL_CODE_TYPE = INTERPRETED;
alter type TYPE2 compile body PLSQL_CODE_TYPE = NATIVE;
set serveroutput on;
declare
  t type2;
begin

  dbms_output.put_line('Start Test2');
  t := type2(in_name=>'A');
  dbms_output.put_line('End Test2');
exception
 when others then
   dbms_output.put_line('Error Test2');
end;
/

In diesem Fall bekommt man eine erfolgreiche Ausführung des Codes:

Start Test2
End Test2

Das ganze wurde von mir auf Oracle 11.2.03 getestet und für unschön befunden.
Fazit: Wenn man auf Native umsteigt, muss man vorsichtig sein, dass auch alles in native kompiliert wird, sonst besteht die Gefahr etwas wichtiges zu übersehen.

Irgendwie ist heute alles kaputt

Heute ist ist bei mir voll der Bug-Tag. Bei der Sprachumstellung für die Tastatur musste ich feststellen, dass sich die englische Sprache installiert hat. Ich habe diese ganz bestimmt nicht installiert.

Spracheinstellungen

Als ich die Sprache in den Spracheinstellungen deinstallieren wollte, musste ich feststellen, dass sie gar nicht da ist, obwohl in der Sprachenleiste eindeutig zu sehen ist. Nach 10 Minuten habe ich diese zwar erfolgreich deinstalliert. Aber komisch war das für mich schon.

Deinstallation geht sehr einfach. Man muss die gleiche Sprache erst ein Mal hinzufügen, in meinem Fall war das Englisch US und dann einfach nur  entfernen.

Des Weiteren stürzte bei mir Firefox ab, als ich versucht habe in WordPress ACP ein Bild hinzufügen. Nicht mal das Menü wurde geladen, stürzte Firefox ab. Nach dem 2. Versuch, der genau so erfolgreich den Browser zum Absturz brachte, habe ich aufgegeben und tippte alles mit dem Live Writer von MS.

It’s not a bug, it’s a feature…ein Fehler bringt Safari zum Absturz.

Wenn man in seinem Sourcecode nur folgende Zeilen stehen hat:

<style>
wbr { position: absolute; }
</style>

<wbr />

und die Seite mit dem Safari Browser aufgerugen wird, dann kann es passieren, dass der Browser abstürtzt 🙂

hier die Seite mit dem Beispiel zum _http://blog.shureg.de/stuff/crash-safari.html

und die Ergebnise von browsershot.org