【发布时间】:2012-08-10 21:49:30
【问题描述】:
我正在使用一个函数,该函数将日期作为 varchar 输入,然后 n 将其传递给另一个过程。我可以看到在某些情况下没有插入与日期相关的过去时间。请在下面找到我的功能
iv_plsql4 :='10-AUG-2012 07:30:30';
ln_dbms_cur := DBMS_SQL.OPEN_CURSOR;
iv_plsql2 := BEGIN PKG_PRADEEP.P_INSERTDATE(to_date(iv_plsql4,'DD-MM-YYYY HH24:MI:SS'));
DBMS_OUTPUT.put_line(iv_plsql);
DBMS_SQL.PARSE(ln_dbms_cur,iv_plsql,DBMS_SQL.NATIVE);
ln_cur_execute := DBMS_SQL.EXECUTE(ln_dbms_cur);
此代码将日期插入数据库,但时间为上午 12:00
但如果我更改字符串 iv_plsql2 如下所示,日期将插入 TIME 字段。
iv_plsql2 := BEGIN PKG_PRADEEP.P_INSERTDATE(to_date('10-AUG-2012 07:30:30','DD-MM-YYYY HH24:MI:SS'));
谁能解释为什么会这样?
【问题讨论】:
-
您发布的代码似乎没有意义。您将 PL/SQL 块分配给无法编译的
iv_plsql2变量。您使用动态 SQL 的事实使我怀疑您实际上是在为iv_plsql2分配一个恰好包含 PL/SQL 块的字符串。反过来,这强烈暗示错误出现在您构建此字符串时,该字符串显然是您为了发布问题而从代码中编辑出来的。此外,我希望您需要使用动态 SQL 确实是有原因的——这里没有任何迹象表明需要这样做。 -
是的贾斯汀。我已经编辑了在论坛上发布的代码,这与我在生产环境中的查询类似。您对to_date问题有什么建议吗?
-
这与 Java 有什么关系?我只看到 PL/SQL。
-
我强烈怀疑错误出在您编辑的代码中。我怀疑您编辑的代码在某些时候会进行隐式日期到字符串的转换。但是,由于我看不到您已编辑的代码,因此无法说明隐式转换发生在该代码的哪个位置。
标签: java oracle function oracle10g native