Advertisement
Guest User

Untitled

a guest
Apr 20th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.00 KB | None | 0 0
  1.  
  2. CREATE OR REPLACE TYPE POINT AS OBJECT
  3. ( X INT
  4. , Y INT
  5. , label VARCHAR(1),
  6. CONSTRUCTOR FUNCTION Point
  7. ( X INT
  8. , Y INT
  9. , label VARCHAR) RETURN SELF AS RESULT);
  10. /
  11.  
  12. CREATE OR REPLACE TYPE BODY POINT AS
  13. Constructor FUNCTION Point
  14. (   X INT
  15.  ,  Y INT
  16.  ,  label VARCHAR
  17.  ) RETURN SELF AS RESULT
  18. IS
  19. BEGIN
  20.     IF X<0 THEN
  21.         RAISE_APPLICATION_ERROR(-20001,'X value cannot be less than 0');
  22.     ELSIF Y<0 THEN
  23.         RAISE_APPLICATION_ERROR(-20002,'Y value cannot be less than 0');
  24.     END IF;
  25.     self.x := x;
  26.     self.y := y;
  27.     self.label := label;
  28.     RETURN;
  29.   END;
  30. END;
  31. /
  32.  
  33. CREATE TABLE POINTS OF POINT
  34. (UNIQUE(X,Y),UNIQUE(label))
  35.  
  36. INSERT INTO points
  37. VALUES(point(2,1,'b'))
  38. /
  39.  
  40. INSERT INTO points
  41. VALUES(point(1,1,'a'))
  42. /
  43.  
  44. INSERT INTO points
  45. VALUES(point(1,2,'e'))
  46. /
  47.  
  48. --repeat and try to make not unique inserts
  49.  
  50. SELECT REF(p)
  51. FROM points P
  52.  
  53. SELECT p.ep1.x,p.ep2.x,p.ep1.y,p.ep2.y
  54. FROM lines p
  55.  
  56. CREATE OR REPLACE TYPE LINE AS Object
  57. ( EP1 REF POINT,
  58.   EP2 REF POINT,
  59. CONSTRUCTOR FUNCTION Line
  60. (EP1 REF POINT,
  61.  EP2 REF POINT) RETURN SELF AS RESULT);
  62. /
  63.  
  64. CREATE OR REPLACE TYPE BODY LINE AS
  65. Constructor FUNCTION LINE
  66. ( EP1 REF POINT,
  67.   EP2 REF POINT
  68. ) RETURN SELF AS RESULT
  69. IS
  70.     x1 INTEGER;
  71.     x2 INTEGER;
  72.     y1 INTEGER;
  73.     y2 INTEGER;
  74.     valid BOOLEAN := FALSE;
  75. BEGIN
  76. RAISE_APPLICATION_ERROR(-20011,'congratulations, you''ve won, its'' running the constructor');
  77. SELECT DEREF(ep1).x INTO x1 FROM dual;
  78. SELECT DEREF(ep1).y INTO y1 FROM dual;
  79. SELECT DEREF(ep2).x INTO x2 FROM dual;
  80. SELECT DEREF(ep2).y INTO y2 FROM dual;
  81.     IF x1 = x2 THEN
  82.         valid := TRUE;
  83.     END IF;
  84.     IF y1 = y2 THEN
  85.         valid := TRUE;
  86.     END IF;
  87.     IF valid THEN
  88.         SELF.ep1    := ep1; --assigning the argument to the attribute
  89.         SELF.ep2    := ep2;
  90.         RETURN;
  91.     ELSE
  92.         RAISE_APPLICATION_ERROR(-20003,'X values are not equal, not making a stright line');
  93.     END IF;
  94.   END;
  95. END;
  96. /
  97.  
  98. CREATE TABLE Lines OF Line;
  99.  
  100. INSERT INTO Lines
  101. VALUES(LINE(SELECT REF(p) FROM points p WHERE p.label='b')
  102. ,LINE(SELECT REF(p) FROM points p WHERE p.label='a'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement