Index: .idea/sqldialects.xml
===================================================================
--- .idea/sqldialects.xml	(revision 2061961352f193fd60d2c6841e8c4bea380d1b47)
+++ .idea/sqldialects.xml	(revision bc185a41808009d8e1e60e9853a58f21bdbe2357)
@@ -7,4 +7,5 @@
     <file url="file://$PROJECT_DIR$/music/procedures/insert_track_with_price.sql" dialect="PostgreSQL" />
     <file url="file://$PROJECT_DIR$/music/transactions/add_tracks_to_playlist.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/music/transactions/batch_update_reports_to.sql" dialect="PostgreSQL" />
     <file url="file://$PROJECT_DIR$/music/transactions/create_invoice_with_lines.sql" dialect="PostgreSQL" />
     <file url="file://$PROJECT_DIR$/music/triggers/customer_deletion.sql" dialect="PostgreSQL" />
Index: music/transactions/batch_update_reports_to.sql
===================================================================
--- music/transactions/batch_update_reports_to.sql	(revision bc185a41808009d8e1e60e9853a58f21bdbe2357)
+++ music/transactions/batch_update_reports_to.sql	(revision bc185a41808009d8e1e60e9853a58f21bdbe2357)
@@ -0,0 +1,27 @@
+CREATE OR REPLACE FUNCTION batch_update_reports_to(
+    _updates JSON
+) RETURNS VOID AS $$
+DECLARE
+    item JSON;
+    _employee_id INTEGER;
+    _reports_to_id INTEGER;
+BEGIN
+    BEGIN
+        FOR item IN SELECT * FROM json_array_elements(_updates)
+        LOOP
+            _employee_id := (item->>'employee_id')::INTEGER;
+            _reports_to_id := (item->>'reports_to_id')::INTEGER;
+
+            UPDATE employee
+            SET reports_to = _reports_to_id
+            WHERE employee_id = _employee_id;
+
+            IF NOT FOUND THEN
+                RAISE EXCEPTION 'Employee with id % does not exist', _employee_id;
+            END IF;
+        END LOOP;
+    EXCEPTION WHEN OTHERS THEN
+        RAISE EXCEPTION 'Error updating reports_to: %', SQLERRM;
+    END;
+END;
+$$ LANGUAGE plpgsql;
