superjorj

bdoo09

Apr 18th, 2016
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 4.03 KB | None | 0 0
  1.  
  2. CREATE OR REPLACE TYPE persoana AS OBJECT
  3. (
  4.  nume VARCHAR2(10),
  5.  varsta INTEGER,
  6.  CONSTRUCTOR FUNCTION persoana RETURN SELF AS RESULT,
  7.  MEMBER PROCEDURE show
  8. ) NOT FINAL;
  9.  
  10. CREATE OR REPLACE TYPE BODY persoana AS
  11.  
  12.  CONSTRUCTOR FUNCTION persoana RETURN self AS result IS
  13.  BEGIN
  14.  nume := 'none';
  15.  varsta := 0;
  16.  RETURN;
  17.  END;
  18.  
  19.  MEMBER PROCEDURE show IS
  20.  BEGIN
  21.  DBMS_OUTPUT.put_line(nume || ' ' || varsta);
  22.  END;
  23.  
  24. END;
  25.  
  26. CREATE OR REPLACE TYPE student UNDER persoana
  27. (
  28.  nota INTEGER,
  29.  CONSTRUCTOR FUNCTION student(n INTEGER) RETURN SELF AS RESULT,
  30.  OVERRIDING MEMBER PROCEDURE show
  31. );
  32.  
  33.  
  34.  
  35. CREATE OR REPLACE TYPE BODY student AS
  36.  CONSTRUCTOR FUNCTION student(n INTEGER) RETURN SELF AS RESULT IS
  37.  BEGIN
  38.  nume := 'none';
  39.  varsta := 0;
  40.  nota := n;
  41.  RETURN;
  42.  END;
  43.  OVERRIDING MEMBER PROCEDURE show IS
  44.  BEGIN
  45.  (SELF AS persoana).show();
  46.  DBMS_OUTPUT.put_line(nota);
  47.  END show;
  48. END;
  49.  
  50. CREATE OR REPLACE TYPE profesor UNDER persoana
  51. (
  52.  curs VARCHAR2(10),
  53.  CONSTRUCTOR FUNCTION profesor(cursul VARCHAR2) RETURN SELF AS RESULT,
  54.  OVERRIDING MEMBER PROCEDURE show
  55. );
  56.  
  57. CREATE OR REPLACE TYPE BODY profesor AS
  58.  CONSTRUCTOR FUNCTION profesor(cursul VARCHAR2) RETURN SELF AS RESULT IS
  59.  BEGIN
  60.  nume := 'none';
  61.  varsta := 0;
  62.  curs := cursul;
  63.  RETURN;
  64.  END;
  65.  OVERRIDING MEMBER PROCEDURE show IS
  66.  BEGIN
  67.  (SELF AS persoana).show();
  68.  DBMS_OUTPUT.put_line(curs);
  69.  END show;
  70. END;
  71.  
  72. DECLARE
  73.  p1 persoana;
  74.  p2 persoana;
  75.  s1 student;
  76.  s2 student;
  77.  ps persoana;
  78.  pr1 profesor;
  79.  pr2 profesor;
  80.  pr persoana;
  81.  
  82. BEGIN
  83.  
  84.  p1 := NEW persoana('Ion', 40);
  85.  p2 := NEW persoana;
  86.  p1.show();
  87.  p2.show();
  88.  
  89.  s1 := NEW student('Vasile', 23, 9);
  90.  s2 := NEW student(8);
  91.  s1.show();
  92.  s2.show();
  93.  
  94.  pr1 := NEW profesor('Prof 1', 23, 'BDOO');
  95.  pr2 := NEW profesor('ECBD');
  96.  pr1.show();
  97.  pr2.show();
  98.  
  99.  ps := NEW student('Andrei', 24, 10);
  100.  ps.show();
  101.  
  102.   pr := NEW profesor('Prof 2', 23,'LFT');
  103.   pr.show();
  104. END;
  105.  
  106. SET serveroutput ON;
  107. ----3------
  108. CREATE OR REPLACE TYPE calculator AS OBJECT
  109. (
  110. frecventa_cpu FLOAT,
  111.  ram FLOAT,
  112.  hdd INTEGER,
  113.  CONSTRUCTOR FUNCTION calculator RETURN SELF AS RESULT,
  114.  MEMBER PROCEDURE show
  115. ) NOT FINAL;
  116. /
  117. CREATE OR REPLACE TYPE BODY calculator AS
  118.  
  119.  CONSTRUCTOR FUNCTION calculator RETURN self AS result IS
  120.  BEGIN
  121.  ram := 4;
  122.  frecventa_cpu := 1.6;
  123.  hdd :=500;
  124.  RETURN;
  125.  END;
  126.  
  127.  MEMBER PROCEDURE show IS
  128.  BEGIN
  129.  DBMS_OUTPUT.put_line('frecventa cpu ' ||frecventa_cpu || 'GHz; RAM ' || ram ||'GB HDD ' || hdd ||'GB');
  130.  END;
  131.  
  132. END;
  133. /
  134.  
  135. CREATE OR REPLACE TYPE laptop UNDER calculator
  136. (
  137.  durata_baterie FLOAT,
  138.  CONSTRUCTOR FUNCTION laptop(n FLOAT) RETURN SELF AS RESULT,
  139.  OVERRIDING MEMBER PROCEDURE show
  140. );
  141.  
  142. CREATE OR REPLACE TYPE BODY laptop AS
  143.  CONSTRUCTOR FUNCTION laptop(n FLOAT) RETURN SELF AS RESULT IS
  144.  BEGIN
  145.   ram := 4;
  146.  frecventa_cpu := 1.6;
  147.  hdd :=500;
  148.  durata_baterie := n;
  149.  RETURN;
  150.  END;
  151.  OVERRIDING MEMBER PROCEDURE show IS
  152.  BEGIN
  153.  (SELF AS calculator).show();
  154.  DBMS_OUTPUT.put_line('durata baterie ' || durata_baterie ||'h ');
  155.  END show;
  156. END;
  157.  
  158. CREATE OR REPLACE TYPE desktop UNDER calculator
  159. (
  160.  tip_carcasa VARCHAR2(10),
  161.  CONSTRUCTOR FUNCTION desktop(carcasa VARCHAR2) RETURN SELF AS RESULT,
  162.  OVERRIDING MEMBER PROCEDURE show
  163. );
  164.  
  165. CREATE OR REPLACE TYPE BODY desktop AS
  166.  CONSTRUCTOR FUNCTION desktop(carcasa VARCHAR2) RETURN SELF AS RESULT IS
  167.  BEGIN
  168.   ram := 4;
  169.  frecventa_cpu := 1.6;
  170.  hdd :=500;
  171.  tip_carcasa := carcasa;
  172.  RETURN;
  173.  END;
  174.  OVERRIDING MEMBER PROCEDURE show IS
  175.  BEGIN
  176.  (SELF AS calculator).show();
  177.  DBMS_OUTPUT.put_line('tip carcasa ' || tip_carcasa);
  178.  END show;
  179. END;
  180.  
  181. CREATE TYPE v_calc AS VARRAY(6) OF calculator;
  182.  
  183. DECLARE
  184. pc v_calc;
  185. c1 calculator;
  186. c2 calculator;
  187. d1 desktop;
  188. d2 desktop;
  189. l1 laptop;
  190. l2 laptop;
  191. i int;
  192. BEGIN
  193.   c1 := NEW calculator();
  194.   c2 := NEW calculator(1.8,0.5,80);
  195.   d1 := NEW desktop(1.8,0.5,80,'Middle');
  196.    d2 := NEW desktop('Mini');
  197.    l1 := NEW laptop(10);
  198.     l2 := NEW laptop(1.8,0.5,80,4);
  199.     pc := v_calc(c1,c2,d1,d2,l1,l2);
  200.     c1.show();
  201. FOR i IN 1 .. pc.COUNT
  202.  LOOP
  203.   pc(i).show();
  204.  END LOOP;
  205. END;
Advertisement
Add Comment
Please, Sign In to add comment