Advertisement
andreidan27

Untitled

Jan 8th, 2021
500
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.62 KB | None | 0 0
  1. SELECT * FROM spectator;
  2.  CREATE SEQUENCE id_seq
  3.     START WITH 100
  4.     increment BY -1
  5.     minvalue 1
  6.     maxvalue 100
  7.     cycle;
  8.    
  9. CREATE TABLE verif_14(
  10.     id_14 NUMBER(10) primary key,
  11.     nume VARCHAR2(50) ,
  12.     prenume VARCHAR2(50),
  13.     rand INTEGER,
  14.     piesa NUMBER(10,0)
  15. );
  16.    
  17. CREATE OR REPLACE PACKAGE pachet_14 IS
  18.  
  19.   TYPE t_rec IS RECORD (
  20.     nume VARCHAR2(50),
  21.     prenume VARCHAR2(50),
  22.     rand INTEGER,
  23.     piesa NUMBER(10,0)
  24.     );
  25.    
  26.     coincidenta t_rec;
  27.    
  28.     TYPE t_rec_table IS TABLE OF t_rec;
  29.     ntable t_rec_table := t_rec_table();
  30.  
  31.   FUNCTION f_14
  32.     RETURN NUMBER;
  33.  
  34. END pachet_14;
  35. /
  36.  
  37.  
  38. CREATE OR REPLACE PACKAGE BODY pachet_14 IS
  39.    
  40.     FUNCTION f_14
  41.         RETURN NUMBER IS
  42.             ans NUMBER := 0 ;
  43.             vechi NUMBER := 0;
  44.             i NUMBER := 0;
  45.     BEGIN
  46.        
  47.         ntable.extend;
  48.         i := i + 1;
  49.         coincidenta.nume := 'asfasf';
  50.         coincidenta.prenume := 'asfasf';
  51.         coincidenta.rand := 100;
  52.         coincidenta.piesa := 1001;
  53.         ntable(i) := coincidenta;
  54.        
  55.         FOR c IN ( SELECT nume, prenume, rand, cod_piesa
  56.         FROM spectator s JOIN rezervare r ON (s.cnp = r.sp_id)
  57.         ) LOOP
  58.             coincidenta.nume := c.nume;
  59.             coincidenta.prenume := c.prenume;
  60.             coincidenta.rand := c.rand;
  61.             coincidenta.piesa := c.cod_piesa;
  62.            
  63.             FOR j IN ntable.FIRST..i LOOP
  64.                 IF ntable(j).nume = coincidenta.nume AND ntable(j).prenume = coincidenta.prenume AND ntable(j).rand = coincidenta.rand AND ntable(j).piesa = coincidenta.piesa THEN
  65.                     DBMS_OUTPUT.put_line(c.nume || ' ' || c.prenume);
  66.                     ans := ans + 1;
  67.                     INSERT INTO verif_14 VALUES(id_seq.NEXTVAL, coincidenta.nume, coincidenta.prenume, coincidenta.rand, coincidenta.piesa);
  68.                 END IF;
  69.             END LOOP;
  70.            
  71.            
  72.             IF ans = vechi THEN          
  73.                 ntable.extend;
  74.                 i := i + 1;
  75.                 ntable(i) := coincidenta;
  76.             END IF;
  77.                
  78.           END LOOP;
  79.          
  80.           --eliberez memoria
  81.           ntable.DELETE(ntable.FIRST, ntable.LAST);
  82.    
  83.          RETURN ans;
  84.     END f_14;
  85.    
  86. END pachet_14;
  87. /
  88.  
  89. SELECT *
  90. FROM spectator s JOIN rezervare r ON (s.cnp = r.sp_id);
  91.  
  92. DECLARE
  93.   -- Non-scalar parameters require additional processing
  94.   result NUMBER;
  95. BEGIN
  96.   -- Call the function
  97.   result := pachet_14.f_14;
  98.   DBMS_OUTPUT.put_line('Numarul de coincidente este: ' || result);
  99. END;
  100. /
  101.  
  102. SELECT * FROM verif_14;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement