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

2014-11-24 17:15:51 · 作者: · 浏览: 0

/

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 --可以看到确实时、分、秒已经丢失,怀疑是隐式转换导致


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



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