• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Oracle 存储过程中使用date 时、分、秒丢失

mysql 搞代码 4年前 (2022-01-09) 39次浏览 已收录 0个评论

今天有一开发兄弟找我,说Oracle 出现一奇怪现象,在存储过程中赋date类型的值,时、分、秒都丢失了,下面来做个试验:

今天有一开发兄弟找我,说Oracle 出现一奇怪现象,在存储过程中赋date类型的值,时、分、秒都丢失了,下面来做个试验:

SQL> drop table test purge;
SQL> create table test
(
fill_date date
);
SQL> insert into test values(sysdate);
SQL> commit;
SQL> select to_char(fill_date,’yyyy-MM-dd HH24:mi:ss’) from test;
TO_CHAR(FILL_DATE,’
——————-

2014-07-18 17:47:22

SQL> CREATE OR REPLACE PROCEDURE test_p
is
s_sql varchar2(500);
s_date date;
begin
s_date:= to_date(‘2014-07-18 17:24:32′,’yyyy-MM-dd HH24:mi:ss’);
s_sql := ‘UPDATE test SET fill_date = ”’||s_date ||””;
execute immediate s_sql;
commit;
end;

/

SQL> call test_p();

SQL> select to_char(fill_date,’yyyy-MM-dd HH24:mi:ss’) from test;
TO_CHAR(FILL_DATE,’
——————-
2014-07-18 00:00:00 –可以看到确实时、分、秒已经丢失,怀疑是隐式转换导致

–调整下存储过程,,看打印出什么来。

来1源gaodai#ma#com搞*代#码1网

SQL> CREATE OR REPLACE PROCEDURE test_p
is
s_sql varchar2(500);
s_date date;
begin
s_date:= to_date(‘2014-07-18 17:24:32′,’yyyy-MM-dd HH24:mi:ss’);
s_sql := ‘UPDATE test SET fill_date = ”’||s_date ||””;
dbms_output.put_line(s_sql);
execute immediate s_sql;
commit;
end;

/

SQL> set serveroutput on

SQL> call test_p();
UPDATE test SET fill_date = ’18-7月 -14′
调用完成。

–确认发生了隐式转换,那就使用绑定变量了

SQL> CREATE OR REPLACE PROCEDURE test_p
is
s_sql varchar2(500);
s_date date;
begin
s_date:= to_date(‘2014-07-18 17:24:32′,’yyyy-MM-dd HH24:mi:ss’);
s_sql := ‘UPDATE test SET fill_date = :1’;
execute immediate s_sql using s_date;
commit;
end;

/

SQL> call test_p();
调用完成。

SQL> select to_char(fill_date,’yyyy-MM-dd HH24:mi:ss’) from test;
TO_CHAR(FILL_DATE,’
——————-
2014-07-18 17:24:32

Java中用JDBC调用Oracle存储过程和函数

Oracle存储过程本地编译方式

Oracle 存储过程及REF CURSOR的使用

Oracle存储过程中提示“权限不足”的解决办法

Oracle利用存储过程返回结果集开发报表

Oracle存储过程中临时表的使用技巧

本文永久更新链接地址:


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle 存储过程中使用date 时、分、秒丢失

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址