This object type represents a point on a Cartesian grid. : Utility Package « PL SQL « Oracle PL / SQL






This object type represents a point on a Cartesian grid.

 
SQL>
SQL> CREATE OR REPLACE TYPE Point AS OBJECT (
  2    x NUMBER,
  3    y NUMBER,
  4
  5    MEMBER FUNCTION ToString RETURN VARCHAR2,
  6    PRAGMA RESTRICT_REFERENCES(ToString, RNDS, WNDS, RNPS, WNPS),
  7
  8    MEMBER FUNCTION Distance(p IN Point DEFAULT Point(0,0))
  9      RETURN NUMBER,
 10    PRAGMA RESTRICT_REFERENCES(Distance, RNDS, WNDS, RNPS, WNPS),
 11
 12    MEMBER FUNCTION Plus(p IN Point) RETURN Point,
 13    PRAGMA RESTRICT_REFERENCES(Plus, RNDS, WNDS, RNPS, WNPS),
 14
 15    MEMBER FUNCTION Times(n IN NUMBER) RETURN Point,
 16    PRAGMA RESTRICT_REFERENCES(Times, RNDS, WNDS, RNPS, WNPS)
 17  );
 18  /

Type created.

SQL> show errors
No errors.
SQL>
SQL> CREATE OR REPLACE TYPE BODY Point AS
  2    MEMBER FUNCTION ToString RETURN VARCHAR2 IS
  3      myResult VARCHAR2(20);
  4      v_xString VARCHAR2(8) := SUBSTR(TO_CHAR(x), 1, 8);
  5      v_yString VARCHAR2(8) := SUBSTR(TO_CHAR(y), 1, 8);
  6    BEGIN
  7      myResult := '(' || v_xString || ', ';
  8      myResult := myResult || v_yString || ')';
  9      RETURN myResult;
 10    END ToString;
 11
 12    MEMBER FUNCTION Distance(p IN Point DEFAULT Point(0,0))
 13      RETURN NUMBER IS
 14    BEGIN
 15      RETURN SQRT(POWER(x - p.x, 2) + POWER(y - p.y, 2));
 16    END Distance;
 17
 18    MEMBER FUNCTION Plus(p IN Point) RETURN Point IS
 19      myResult Point;
 20    BEGIN
 21      myResult := Point(x + p.x, y + p.y);
 22      RETURN myResult;
 23    END Plus;
 24
 25    MEMBER FUNCTION Times(n IN NUMBER) RETURN Point IS
 26      myResult Point;
 27    BEGIN
 28      myResult := Point(x * n, y * n);
 29      RETURN myResult;
 30    END Times;
 31  END;
 32  /

Type body created.

SQL> show errors
No errors.
SQL>
SQL> set serveroutput on
SQL>
SQL> DECLARE
  2    v_Point1 Point := Point(1, 2);
  3    v_Point2 Point;
  4    v_Point3 Point;
  5  BEGIN
  6    v_Point2 := v_Point1.Times(4);
  7    v_Point3 := v_Point1.Plus(v_Point2);
  8    DBMS_OUTPUT.PUT_LINE('Point 2: ' || v_Point2.ToString);
  9    DBMS_OUTPUT.PUT_LINE('Point 3: ' || v_Point3.ToString);
 10    DBMS_OUTPUT.PUT_LINE('Distance between origin and point 1: ' ||
 11      v_Point1.Distance);
 12    DBMS_OUTPUT.PUT_LINE('Distance between point 1 and point 2: ' ||
 13      v_Point1.Distance(v_Point2));
 14  END;
 15  /
Point 2: (4, 8)
Point 3: (5, 10)
Distance between origin and point 1: 2.23
Distance between point 1 and point 2: 6.70

PL/SQL procedure successfully completed.

SQL>

 








Related examples in the same category

1.stop_watch
2.Debug package
3.Debug package based on UTL_FILE
4.Debug package: inserts into a test table
5.Debug package: uses DBMS_OUTPUT.
6.time the performance enhancements of native dynamic SQL.