wrong number or types of arguments in call to X? Here is the code for which I am getting the error mentioned in the question:

CREATE OR REPLACE PACKAGE collegeManagement IS
TYPE studId_scholarshipModification IS RECORD(studentID studenti.id%TYPE, modificationPercentage NUMBER);
TYPE modificationsRecordVarray IS VARRAY(2) OF studId_scholarshipModification;

PROCEDURE modifiyScholarships(modificationsList IN modificationsRecordVarray);
END collegeManagement;
/

-- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ --

CREATE OR REPLACE PACKAGE BODY collegeManagement IS

v_currentSholarship studenti.bursa%TYPE;

PROCEDURE modifiyScholarships(modificationsList IN modificationsRecordVarray) AS
BEGIN
    FOR i IN modificationsList.FIRST..modificationsList.LAST LOOP
        dbms_output.put_line(modificationsList(i).studentID);
        IF modificationsList.EXISTS(i) THEN
            SELECT bursa INTO v_currentSholarship FROM studenti WHERE id=modificationsList(i).studentID;
            IF v_currentSholarship=NULL THEN 
                UPDATE studenti SET bursa=100+100*modificationsList(i).modificationPercentage WHERE id=modificationsList(i).studentID;
            ELSE
                UPDATE studenti SET bursa=bursa+bursa*modificationsList(i).modificationPercentage WHERE id=modificationsList(i).studentID;
            END IF;
        END IF;
    END LOOP;
END modifiyScholarships;
END collegeManagement;
/

-- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ --

set serveroutput on;

DECLARE 

    TYPE studId_scholarshipModification IS RECORD(studentID studenti.id%TYPE, modificationPercentage NUMBER);
    TYPE modificationsRecordVarray IS VARRAY(2) OF studId_scholarshipModification;

    modifications modificationsRecordVarray:=modificationsRecordVarray();

BEGIN

    modifications.extend;
    modifications(1).studentID:=500;
    modifications(1).modificationPercentage:=0.4;
    modifications.extend;
    modifications(2).studentID:=501;
    modifications(2).modificationPercentage:=0.8;

    collegeManagement.modifiyScholarships(modifications);

END;


I already tried debugging the code using the steps suggested here but for the moment I can not understand which is the cause for the error.
This:

DECLARE 

    TYPE studId_scholarshipModification IS RECORD(studentID studenti.id%TYPE,
      modificationPercentage NUMBER);
    TYPE modificationsRecordVarray IS VARRAY(2) OF studId_scholarshipModification;

    modifications modificationsRecordVarray:=modificationsRecordVarray();

BEGIN

    modifications.extend;
    modifications(1).studentID:=500;
    modifications(1).modificationPercentage:=0.4;
    modifications.extend;
    modifications(2).studentID:=501;
    modifications(2).modificationPercentage:=0.8;

    collegeManagement.modifiyScholarships(modifications);

END;


Should be this:

DECLARE 

    modifications collegeManagement.modificationsRecordVarray := 
      collegeManagement.modificationsRecordVarray();
    -- no type definition, using the type from the package

BEGIN

    modifications.extend;
    modifications(1).studentID:=500;
    modifications(1).modificationPercentage:=0.4;
    modifications.extend;
    modifications(2).studentID:=501;
    modifications(2).modificationPercentage:=0.8;

    collegeManagement.modifiyScholarships(modifications);

END;


Defining a type with the same name and properties is not the same as using the actual type defined in the package.

You can test it with:

create or replace package pkg1 is
type t_m is varray(2) of number;
procedure p1 (p_m in t_m);
end;
/

create or replace package body pkg1 is
procedure p1(p_m in t_m) as
begin
  null;
end;
end;
/

declare
  type t_m is varray(2) of number;
  m t_m := t_m();
begin
  pkg1.p1(m);
end;
/

declare
  m pkg1.t_m := pkg1.t_m();
begin
  pkg1.p1(m);
end;
/


The first call fails, the second call succeeds.