В процедуре "insert_or_upd ....." аргумент p_schedule_value уже является DATE, поэтому удалите TO_DATE в операторе слияния.
ОБНОВЛЕНО Ответ
Похоже на выполнениеНемедленно передаст даты как varchar2, так что, возможно, было бы лучше явно указать формат даты.
plsql_block :=
'merge into MOVEMENTS m
using (select :id as movement_id, '||q'"to_date(:dt,'YYYYMMDDHH24MI')"'||' as movement_date from dual) s
on (m.MOVEMENT_ID = s.movement_id and m.MOVEMENT_DATE = s.movement_date)
when matched then update set ' ||'colname'||q'" = to_date('"'||to_char(sysdate,'YYYYMMDDHH24MI')||q'"','YYYYMMDDHH24MI')
when not matched then insert (MOVEMENT_ID, MOVEMENT_DATE,MOVEMENT_ETD)
(:id,:dt,to_date(:value1,'YYYYMMDDHH24MI'))"' from dual;
execute immediate plsql_block USING (...... ,to_char(p_mvt_date,'YYYYMMDDHH24MI'),to_char(p_schedule_value,'YYYYMMDDHH24MI'));
Тогда выполняемый оператор будет выглядеть примерно так ...
"merge into MOVEMENTS m
using (select :id as movement_id, to_date(:dt,'YYYYMMDDHH24MI') as movement_date from dual) s
on (m.MOVEMENT_ID = s.movement_id and m.MOVEMENT_DATE = s.movement_date)
when matched then update set colname = to_date('201903151837','YYYYMMDDHH24MI')
when not matched then insert (MOVEMENT_ID, MOVEMENT_DATE,MOVEMENT_ETD)
(:id,:dt,to_date(:value1,'YYYYMMDDHH24MI'))"