通过过程时出现 Oracle Apex 日期验证错误

问题描述 投票:0回答:1

当我传递以下内容时,它可以工作,但如果我将 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;
oracle date format oracle-apex
1个回答
0
投票

在 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'),

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.