sql >> Database >  >> RDS >> Oracle

berekeningen uitvoeren op gegevens in tabeltype

Is er een reden om het niet te selecteren in uw zoekopdracht?

select x.student_id as student_id, cr.course_id as course_i
     , g.score as grade, AVG(g.score) OVER (PARTITION BY x.student_id) as avg_score
 from sf x, grade g, class cs, course cr
where x.no_of_courses>4 
  and x.student_id = g.student_id 
  and cs.course_id = cr.course_id
  and g.class_id = cs.class_id;

Dat plaatst een nieuw veld in je record met de naam avg_score, met de gemiddelde score voor een bepaalde student.

EDIT:U kunt ook een TYPE-declaratie op databaseniveau maken voor de recordstructuur. Als u DML op een objecttype wilt gebruiken, moet u dit op databaseniveau maken, niet op PL/SQL-niveau, aangezien de database niets weet over door PL/SQL gedefinieerde typen.

CREATE OR REPLACE TYPE t_rec AS OBJECT
(
  student_id number,
  course_id number,
  grade number
);

CREATE OR REPLACE TYPE abc AS TABLE OF t_rec;

Dan, in je code:

FOR Rec IN (SELECT student_id, AVG(grade) avg_grade 
              FROM TABLE ( cast( v1 as abc) )
             GROUP BY student_id) 
LOOP
   dbms_output.put_line(Rec.student_id, Rec.avg_grade);
END LOOP;

Totaal niet getest. Dat is echter het algemene idee.




  1. java.sql.SQLException:- ORA-01000:maximale open cursors overschreden

  2. verkorte PDO-query

  3. Weet iemand een goede PHP ORM die GEEN PDO gebruikt?

  4. 2 manieren om erachter te komen tot welk kwartaal een datum behoort in MariaDB