Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle-SP日期输入参数是否被截断?_Oracle_To Date_Input Parameters - Fatal编程技术网

Oracle-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中的截止日期,它已编译,但时间仍被截断

我有一个程序,将一些输入参数作为日期。 当我尝试执行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编辑了我的原始帖子。我现在没有错误消息,但时间仍在计算中: