I dont see any obvious reason the code shouldnt work.
If you execute the same procedure in sqlplus, as the same user, using the same bind values, does the ref cursor return rows? Here's how you can test that, just in case you didnt already know.
var P_SOURCE varchar2(50);
var P_BADGE_NBR varchar2(50);
var P_READ_FROM varchar2(50);
var P_READ_TO varchar2(50);
var rc refcursor;
begin
:P_SOURCE := '<insert value here>';
:P_BADGE_NBR := '<insert value here>';
:P_READ_FROM := '<insert value here>';
:P_READ_TO := '<insert value here>';
end;
/
set autoprint on
exec CM_EMR_GET_METER_READS(:P_SOURCE,:P_BADGE_NBR,:P_READ_FROM,:P_READ_TO,:RC);
Please "Mark as Answered" if this helped or resolved the issue for you.