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