Ваша проблема в том, что вы определили два конструктора одного и того же типа, но не поняли, что, вероятно, это сделали.
При создании типа объекта Oracle создает конструктор по умолчанию, параметры которого соответствуютпараметры типа.Поэтому, когда вы также определили конструктор только с широтой и долготой в качестве входных данных, Oracle не может определить, какой конструктор вызывать, конструктор по умолчанию или ваш, поэтому он выдает следующие ошибки:это, вы можете упростить ваш код:
drop type position;
CREATE OR REPLACE TYPE Position AS OBJECT (longitude NUMBER(11,7), lattitude NUMBER(11,7))
/
DROP TABLE District_Info;
CREATE TABLE District_Info( Dname VARCHAR2(20), DPos Position, Boundary_dist VARCHAR2(20), Launch_ghat CHAR(1) );
INSERT INTO District_Info (Dname,DPos,Boundary_dist,Launch_ghat) VALUES ('d',Position(1.1),'gr','y');
Т.е. вам не нужно объявление конструктора или тело.Если хотите, вы можете иметь РАЗЛИЧНЫЙ конструктор, например:
CREATE OR REPLACE TYPE Position AS OBJECT (longitude NUMBER(11,7), lattitude NUMBER(11,7),
-- Define a constructor that has only 2 parameters.
CONSTRUCTOR FUNCTION position(i_longitude NUMBER)
RETURN SELF AS RESULT
)
/
CREATE OR REPLACE TYPE BODY Position AS
CONSTRUCTOR FUNCTION position(i_longitude NUMBER)
RETURN SELF AS RESULT IS
BEGIN
SELF.longitude := i_longitude;
SELF.lattitude := i_longitude;
RETURN; -- self;
END;
END;
/
show errors;
DROP TABLE District_Info;
CREATE TABLE District_Info( Dname VARCHAR2(20), DPos Position, Boundary_dist VARCHAR2(20), Launch_ghat CHAR(1) );
DESC District_Info;
INSERT INTO District_Info (Dname,DPos,Boundary_dist,Launch_ghat) VALUES ('d',Position(1.1),'gr','y');