Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE TYPE POINT AS OBJECT
- ( X INT
- , Y INT
- , label VARCHAR(1),
- CONSTRUCTOR FUNCTION Point
- ( X INT
- , Y INT
- , label VARCHAR) RETURN SELF AS RESULT);
- /
- CREATE OR REPLACE TYPE BODY POINT AS
- Constructor FUNCTION Point
- ( X INT
- , Y INT
- , label VARCHAR
- ) RETURN SELF AS RESULT
- IS
- BEGIN
- IF X<0 THEN
- RAISE_APPLICATION_ERROR(-20001,'X value cannot be less than 0');
- ELSIF Y<0 THEN
- RAISE_APPLICATION_ERROR(-20002,'Y value cannot be less than 0');
- END IF;
- self.x := x;
- self.y := y;
- self.label := label;
- RETURN;
- END;
- END;
- /
- CREATE TABLE POINTS OF POINT
- (UNIQUE(X,Y),UNIQUE(label))
- INSERT INTO points
- VALUES(point(2,1,'b'))
- /
- INSERT INTO points
- VALUES(point(1,1,'a'))
- /
- INSERT INTO points
- VALUES(point(1,2,'e'))
- /
- --repeat and try to make not unique inserts
- SELECT REF(p)
- FROM points P
- SELECT p.ep1.x,p.ep2.x,p.ep1.y,p.ep2.y
- FROM lines p
- CREATE OR REPLACE TYPE LINE AS Object
- ( EP1 REF POINT,
- EP2 REF POINT,
- CONSTRUCTOR FUNCTION Line
- (EP1 REF POINT,
- EP2 REF POINT) RETURN SELF AS RESULT);
- /
- CREATE OR REPLACE TYPE BODY LINE AS
- Constructor FUNCTION LINE
- ( EP1 REF POINT,
- EP2 REF POINT
- ) RETURN SELF AS RESULT
- IS
- x1 INTEGER;
- x2 INTEGER;
- y1 INTEGER;
- y2 INTEGER;
- valid BOOLEAN := FALSE;
- BEGIN
- RAISE_APPLICATION_ERROR(-20011,'congratulations, you''ve won, its'' running the constructor');
- SELECT DEREF(ep1).x INTO x1 FROM dual;
- SELECT DEREF(ep1).y INTO y1 FROM dual;
- SELECT DEREF(ep2).x INTO x2 FROM dual;
- SELECT DEREF(ep2).y INTO y2 FROM dual;
- IF x1 = x2 THEN
- valid := TRUE;
- END IF;
- IF y1 = y2 THEN
- valid := TRUE;
- END IF;
- IF valid THEN
- SELF.ep1 := ep1; --assigning the argument to the attribute
- SELF.ep2 := ep2;
- RETURN;
- ELSE
- RAISE_APPLICATION_ERROR(-20003,'X values are not equal, not making a stright line');
- END IF;
- END;
- END;
- /
- CREATE TABLE Lines OF Line;
- INSERT INTO Lines
- VALUES(LINE(SELECT REF(p) FROM points p WHERE p.label='b')
- ,LINE(SELECT REF(p) FROM points p WHERE p.label='a'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement