当我传递以下内容时,它可以工作,但如果我将 date_column 放在那里,我会收到错误。 ORA-06502: PL/SQL: 数字或值错误: 字符到数字转换错误
-- Works fine
DECLARE
PARAMS SCHEDULER_ARGS := SCHEDULER_ARGS(BATCH_RUN_NO => :P6_ANNIV_DATE,
BATCH_DETAIL_NO => :P6_BATCH_DETAIL_NO,
ANNIV_DATE => to_char(to_date('01-12-2024', 'DD-MM-YYYY'), 'DD-MM-YYYY'),
POLICY_NO => :P6_POLICY_NO,
NO_OF_THREADS => :P6_NO_OF_THREADS,
THREAD_NO => :P6_THREAD_NO,
ENTITY_NO => :P6_ENTITY_NO,
PROCESS_NO => :P6_PROCESS_NO,
ANNIV_RECALC => :P6_ANNIV_RECALC,
PROC_DESCR => :P6_PROC_DESCR,
OVERRIDE_DATE => :P6_OVERRIDE_DATE);
BEGIN
l_pkg_scheduler_utility.run_batch_threads(params => params);
END;
-- 错误
DECLARE
PARAMS SCHEDULER_ARGS := SCHEDULER_ARGS(BATCH_RUN_NO => :P6_ANNIV_DATE,
BATCH_DETAIL_NO => :P6_BATCH_DETAIL_NO,
ANNIV_DATE => to_char(to_date(:P6_ANN_DATE, 'DD-MM-YYYY'), 'DD-MM-YYYY'),
POLICY_NO => :P6_POLICY_NO,
NO_OF_THREADS => :P6_NO_OF_THREADS,
THREAD_NO => :P6_THREAD_NO,
ENTITY_NO => :P6_ENTITY_NO,
PROCESS_NO => :P6_PROCESS_NO,
ANNIV_RECALC => :P6_ANNIV_RECALC,
PROC_DESCR => :P6_PROC_DESCR,
OVERRIDE_DATE => :P6_OVERRIDE_DATE);
BEGIN
l_pkg_scheduler_utility.run_batch_threads(params => params);
END;
在 APEX 中,所有页面项都被视为字符串,因此任何具有 DATE 类型参数的 pl/sql 都将执行隐式转换。强烈建议进行显式转换
TO_DATE(:P6_OVERRIDE_DATE,'DD-MM-YYYY')
假设页面项的格式掩码为 DD-MM-YYYY。
旁注: 假设参数过程 ANNIV_DATE 类型为 DATE,则此行没有意义:
ANNIV_DATE => to_char(to_date('01-12-2024', 'DD-MM-YYYY'), 'DD-MM-YYYY'),
它将字符串(即 CHAR 数据类型)转换为日期,然后返回字符串...作为 DATE 参数的参数。因此 pl/sql 引擎将再次执行隐式 TO_DATE...即 3 次转换。
就放
ANNIV_DATE => to_date('01-12-2024', 'DD-MM-YYYY'),