CREATE TYPE food_ot AS OBJECT
(
name VARCHAR2 (100),
food_group VARCHAR2 (50),
grown_in VARCHAR2 (100)
)
NOT FINAL;
Type created.
DECLARE
TYPE food_rt IS RECORD
(
name VARCHAR2 (100),
food_group VARCHAR2 (50),
grown_in VARCHAR2 (100)
);
my_favorite_vegetable food_rt;
BEGIN
my_favorite_vegetable.name := 'Brussels Sprouts';
my_favorite_vegetable.food_group := 'Vegetables';
my_favorite_vegetable.grown_in := 'Dirt';
DBMS_OUTPUT.put_line (
my_favorite_vegetable.name || ' are yummy!');
END;
Statement processed.
Brussels Sprouts are yummy!
DECLARE
my_favorite_vegetable food_ot;
BEGIN
my_favorite_vegetable.name := 'Brussels Sprouts';
my_favorite_vegetable.food_group := 'Vegetables';
my_favorite_vegetable.grown_in := 'Dirt';
DBMS_OUTPUT.put_line (
my_favorite_vegetable.name || ' are yummy!');
END;
ORA-06530: Reference to uninitialized composite ORA-06512: at line 4 ORA-06512: at "SYS.DBMS_SQL", line 1721More Details: https://docs.oracle.com/error-help/db/ora-06530
DECLARE
my_favorite_vegetable food_ot
:= food_ot ('Brussels Sprouts', 'Vegetables', 'Dirt');
BEGIN
DBMS_OUTPUT.put_line (
my_favorite_vegetable.name || ' are yummy!');
END;
Statement processed.
Brussels Sprouts are yummy!
CREATE OR REPLACE TYPE food_ot AS OBJECT
(
name VARCHAR2 (100),
food_group VARCHAR2 (50),
grown_in VARCHAR2 (100),
CONSTRUCTOR FUNCTION food_ot
RETURN SELF AS RESULT,
CONSTRUCTOR FUNCTION food_ot (NAME_IN IN VARCHAR2)
RETURN SELF AS RESULT
)
NOT FINAL;
Type created.
CREATE OR REPLACE TYPE BODY food_ot
IS
CONSTRUCTOR FUNCTION food_ot
RETURN SELF AS RESULT
IS
BEGIN
RETURN;
END;
CONSTRUCTOR FUNCTION food_ot (NAME_IN IN VARCHAR2)
RETURN SELF AS RESULT
IS
BEGIN
self.name := NAME_IN;
RETURN;
END;
END;
Type created.
DECLARE
my_favorite_vegetable food_ot
:= food_ot ('Brussels Sprouts');
BEGIN
DBMS_OUTPUT.put_line (
my_favorite_vegetable.name || ' are yummy!');
END;
Statement processed.
Brussels Sprouts are yummy!
DECLARE
my_favorite_vegetable food_ot
:= food_ot ();
BEGIN
my_favorite_vegetable.name := 'Brussels Sprouts';
DBMS_OUTPUT.put_line (
my_favorite_vegetable.name || ' are yummy!');
END;
Statement processed.
Brussels Sprouts are yummy!
DECLARE
my_favorite_vegetable food_ot
:= food_ot ('Brussels Sprouts', 'Vegetables', 'Dirt');
BEGIN
DBMS_OUTPUT.put_line (
my_favorite_vegetable.name || ' are yummy!');
END;
Statement processed.
Brussels Sprouts are yummy!
Can we override the default constructor?
CREATE OR REPLACE TYPE food_ot
AS OBJECT
(
name VARCHAR2 (100),
food_group VARCHAR2 (50),
grown_in VARCHAR2 (100),
CONSTRUCTOR FUNCTION food_ot (name_in IN VARCHAR2,
food_group_in IN VARCHAR2,
grown_in_in IN VARCHAR2)
RETURN SELF AS RESULT
)
NOT FINAL;
Type created.
Compiles just fine
CREATE OR REPLACE TYPE BODY food_ot
IS
CONSTRUCTOR FUNCTION food_ot (name_in IN VARCHAR2,
food_group_in IN VARCHAR2,
grown_in_in IN VARCHAR2)
RETURN SELF AS RESULT
IS
BEGIN
self.name := name_in;
self.food_group := grown_in_in;
self.grown_in := food_group_in;
RETURN;
END;
END;
Type created.
DECLARE
my_favorite_vegetable food_ot
:= food_ot ('Brussels Sprouts', 'Vegetables', 'Dirt');
BEGIN
DBMS_OUTPUT.put_line (
my_favorite_vegetable.name
|| ' are grown in '
|| my_favorite_vegetable.grown_in);
END;
ORA-06550: line 3, column 10: PLS-00307: too many declarations of 'FOOD_OT' match this callMore Details: https://docs.oracle.com/error-help/db/ora-06550
DECLARE
my_favorite_vegetable food_ot
:= food_ot (name_in => 'Brussels Sprouts',
food_group_in => 'Vegetables',
grown_in_in => 'Dirt');
BEGIN
DBMS_OUTPUT.put_line (
my_favorite_vegetable.name
|| ' are grown in '
|| my_favorite_vegetable.grown_in);
END;
Statement processed.
Brussels Sprouts are grown in Vegetables
DECLARE
my_favorite_vegetable food_ot
:= food_ot (name => 'Brussels Sprouts',
food_group => 'Vegetables',
grown_in => 'Dirt');
BEGIN
DBMS_OUTPUT.put_line (
my_favorite_vegetable.name
|| ' are grown in '
|| my_favorite_vegetable.grown_in);
END;
Statement processed.
Brussels Sprouts are grown in Dirt
CREATE OR REPLACE TYPE food_ot
AS OBJECT
(
name VARCHAR2 (100),
food_group VARCHAR2 (50),
grown_in VARCHAR2 (100),
CONSTRUCTOR FUNCTION food_ot (name IN VARCHAR2,
food_group IN VARCHAR2,
grown_in IN VARCHAR2)
RETURN SELF AS RESULT
)
NOT FINAL;
Type created.
CREATE OR REPLACE TYPE BODY food_ot
IS
CONSTRUCTOR FUNCTION food_ot (name IN VARCHAR2,
food_group IN VARCHAR2,
grown_in IN VARCHAR2)
RETURN SELF AS RESULT
IS
BEGIN
self.name := name;
self.food_group := grown_in;
self.grown_in := food_group;
RETURN;
END;
END;
Type created.
DECLARE
my_favorite_vegetable food_ot
:= food_ot (name => 'Brussels Sprouts',
food_group => 'Vegetables',
grown_in => 'Dirt');
BEGIN
DBMS_OUTPUT.put_line (
my_favorite_vegetable.name
|| ' are grown in '
|| my_favorite_vegetable.grown_in);
END;
Statement processed.
Brussels Sprouts are grown in Vegetables
DECLARE
my_favorite_vegetable food_ot
:= food_ot ('Brussels Sprouts', 'Vegetables', 'Dirt');
BEGIN
DBMS_OUTPUT.put_line (
my_favorite_vegetable.name
|| ' are grown in '
|| my_favorite_vegetable.grown_in);
END;
Statement processed.
Brussels Sprouts are grown in Vegetables