Christian: ORACLE - objektrelationale Erweiterung

Beitrag lesen

Hallo zusammen,

bei Ausführung folgenden Skriptes kommt es zu einer Fehlermeldung:

-- -----------------------------------------------------------

CREATE OR REPLACE TYPE SIMPLE_t AS OBJECT (
    name VARCHAR2(50),

CONSTRUCTOR FUNCTION SIMPLE_t (name VARCHAR2)
     RETURN SELF AS RESULT,

MEMBER FUNCTION doIt
        RETURN VARCHAR2

) NOT FINAL;
/

CREATE OR REPLACE TYPE BODY SIMPLE_t AS

CONSTRUCTOR FUNCTION SIMPLE_t (name VARCHAR2)
     RETURN SELF AS RESULT
 IS
        METHOD VARCHAR2(50) := '[SIMPLE_t.CONSTRUCTOR] ';
 BEGIN
     SELF.name := name;
        DBMS_OUTPUT.PUT_LINE(METHOD || 'my name: ' || SELF.name);
 END;

MEMBER FUNCTION doIt
        RETURN VARCHAR2
    IS
        METHOD VARCHAR2(50) := '[SIMPLE_t.doIt] ';
    BEGIN
        DBMS_OUTPUT.PUT_LINE(METHOD || 'name: ' || SELF.name);
     RETURN SELF.name;
    EXCEPTION
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE(METHOD || 'EXCEPTION occurred...');
    END;

END;
/

SHOW ERRORS TYPE BODY SIMPLE_t;
/

DECLARE
    METHOD VARCHAR2(50) := '[SIMPLE_t] ';
    s1 SIMPLE_t;               -- simple Object
BEGIN
 s1 := NEW SIMPLE_t(name => 'myObject');
 DBMS_OUTPUT.PUT_LINE(METHOD || 'name: ' || s1.doIt());
END;
/

-- -----------------------------------------------------------

Ausgabe und Fehlermeldung:

[SIMPLE_t.CONSTRUCTOR] my name: myObject
DECLARE
*
FEHLER in Zeile 1:
ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
ORA-06512: in "SIMPLE_T", Zeile 18
ORA-06512: in Zeile 5

Offensichtlich wird der übergebene Wert des Konstruktor-Parameters "name" nicht (dauerhaft) in der Member-Variable "name" gehalten. Was mache ich falsch?

ORACLE; Version 10.2 mit SQL*Plus.

Besten Dank für gute Ratschläge -

Christian