Oracle-SP日期输入参数是否被截断?
我有一个程序,将一些输入参数作为日期。 当我尝试执行SP时,以下是分配给每个参数的值 但是,当我执行时,会收到一条关于p_schedule_value参数上日期格式的错误消息。事实上,我们可以看到它没有以指定的格式传递日期;相反,它会截断时间并将其作为yyyy MMM dd传递 您可以在下面的屏幕截图上看到输出中的动态sql,其中包含错误消息和p_schedule_value的值 为什么我的时间被缩短了?它似乎忽略了最新的转换 谢谢 编辑: 试图删除SP中的截止日期,它已编译,但时间仍被截断。只有日期部分插入到我的行中。Oracle-SP日期输入参数是否被截断?,oracle,to-date,input-parameters,Oracle,To Date,Input Parameters,我有一个程序,将一些输入参数作为日期。 当我尝试执行SP时,以下是分配给每个参数的值 但是,当我执行时,会收到一条关于p_schedule_value参数上日期格式的错误消息。事实上,我们可以看到它没有以指定的格式传递日期;相反,它会截断时间并将其作为yyyy MMM dd传递 您可以在下面的屏幕截图上看到输出中的动态sql,其中包含错误消息和p_schedule_value的值 为什么我的时间被缩短了?它似乎忽略了最新的转换 谢谢 编辑: 试图删除SP中的截止日期,它已编译,但时间仍被截断
在插入的\u或\u upd中。。。。。过程参数p_schedule_值已经是一个日期,因此在merge语句中删除TO_日期 最新答案 似乎execute immediate会将日期作为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'))"
获取不同的错误消息:连接到数据库localDB。ORA-00904:MAY:无效标识符ORA-06512:在RTT.INSERT_或_UPD_MOVEMENTS_SCHEDULE_FIELDS_PROC,第18行ORA-06512:在第14行使用select:id作为movement_id合并到MOVEMENTS m中,:dt作为m.movement_ID=s.movement_ID和m.movement_date=s.movement_date上的双s的移动_日期(匹配时),然后更新集合移动_ETD=01-MAY-19(不匹配时),然后插入移动_ID、移动_date、移动_ETD值:ID,:dt,:value1但仍然缺少时间您是否删除了已经是日期的参数周围的TO_DATE?你能显示你程序的当前状态吗?是的,你可以在我的评论中看到程序的输出。我用SP编辑了我的原始帖子。我现在没有错误消息,但时间仍在计算中: