'oci_execute(): ORA-06550: PLS-00306: wrong number or types of arguments in call to 'GET_CITIZEN_INFO'

My PHP code:

$sql = '
begin
get_citizen_info(:n_id, :c_name, :c_date_of_birth, :c_vehicle_number, :success);
end;';
$result = oci_parse($conn, $sql);
oci_bind_by_name($result, ':n_id', $_POST['n_id'], -1);
oci_bind_by_name($result, ':c_name', $c_name, 50);
oci_bind_by_name($result, ':c_date_of_birth', $c_date_of_birth, 50);
oci_bind_by_name($result, ':c_vehicle_number', $c_vehicle_number, 50);
oci_bind_by_name($result, ':success', $success, 8);
oci_execute($result);

My procedure

create or replace procedure get_citizen_info(n_id number, 
                                             c_name out varchar, 
                                             c_date_of_birth out varchar, 
                                             c_vehicle_number out varchar, 
                                             success out boolean)
is
c_id number;
begin
success := true;
begin
select name, date_of_birth, vehicle_number into c_name, c_date_of_birth, c_vehicle_number 
  from citizens 
 where national_id = n_id;
exception
when no_data_found then
success := false;
end;
end

Error

<br /><b>Warning</b>:  oci_execute(): ORA-06550: line 3, column 1:PLS-00306: wrong number or types of arguments in call to 'GET_CITIZEN_INFO'ORA-06550: line 3, column 1:PL/SQL: Statement ignored in <b>C:\xampp\htdocs\get_citizen_info(add-case).php</b> on line <b>15</b><br />false

I am proving correct number of argument so what seems to be wrong here?



Solution 1:[1]

You are providing the correct number of arguments, but not necessarily the correct type of arguments. You might need to specify at least the first and last parameter types:

oci_bind_by_name($result, ':n_id', $_POST['n_id'], -1, OCI_B_INT);
oci_bind_by_name($result, ':c_name', $c_name, 50);
oci_bind_by_name($result, ':c_date_of_birth', $c_date_of_birth, 50);
oci_bind_by_name($result, ':c_vehicle_number', $c_vehicle_number, 50);
oci_bind_by_name($result, ':success', $success, 8, OCI_B_BOL);

docs

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Alex Poole