INSERT INTO via ROWTYPE

Posted by Sven Thämar

Allgemein

Ab der Oracle Datenbank Version 9.2 ist das INSERT-Statement um eine weitere funktionalität Erweitert worden. Es ist nun möglich, an eine Insert-Anweisung, statt einzelner Felder, einen kompletten Record zu übergeben. Dieser Record muss dabei die gleiche Struktur wie die entsprechende Tabelle widerspiegeln. Jedoch dürfen dabei einzelne Felder leer bleiben.

Der Vorteil dieser erweiterten funktionalität liegt vor allem daran, wenn man ein INSERT-Statement in eine Prozedur/Funktion einbettet und einen Datensatz als Parameter übergibt. Dadurch kann die Tabelle ohne Probleme erweitert/geändert werden ohne das der Parameter angepasst werden muss. D.h die Signatur der Prozedur/Funktion bleibt unverändert.

Source Code

Prozedur zum einfügen eines Datensatzes via ROWTYPE.

PROCEDURE do_insert(pi_rec hr.employees%ROWTYPE) IS 
BEGIN 
   INSERT INTO hr.employees VALUES pi_rec; 
   COMMIT; 
END do_insert;

Prozedur zum initialisieren der Felder.

PROCEDURE initialisierung IS 
   l_rec hr.employees%ROWTYPE; 
BEGIN 
   -- Der Inhalt des Feldes "employee_id" wird durch ein INSERT-Trigger gesetzt. 
   -- Die Inhalte der Felder "email", "phone_number" und "commission_pct" bleiben leer. 
   l_rec.first_name := 'Max'; 
   l_rec.last_name := 'Mustermann'; 
   l_rec.hire_date := SYSDATE; 
   l_rec.job_id := 'IT-PROG'; 
   l_rec.salary := 4800; 
   l_rec.manager_it := 103; 
   l_rec.department_id := 60;  
 
   do_insert(l_rec); 
END initialisierung;

Leave a Reply