SYSDATE 在 SQL 开发人员 DML 导出中隐式转换为 to_date()

SYSDATE is implicitly is getting converted to to_date() in SQL developer DML Export

提问人:Sakshi 提问时间:8/9/2023 更新时间:8/9/2023 访问量:64

问:

我正在尝试从sql developer(v 17.4)导出dml,但日期列没有按预期出现。

在插入记录时,我使用了 SYSDATE 作为日期字段,但我认为 sql 开发人员隐含地将该 SYSDATE 转换为 to_date()。这是我用来插入的查询 -

插入table_name (INT_OBJ_ID,INT_OBJ_NM,CREATE_DT,CREATE_USER_ID,UPDATE_DT,UPDATE_USER_ID) 值 (2016,'RDS_BV_RETURN_MAIL_INFO',SYSDATE,'User01','User01');

但是在 DML 导出中,我得到了这个 -

插入table_name (INT_OBJ_ID,INT_OBJ_NM,CREATE_DT,CREATE_USER_ID,UPDATE_DT,UPDATE_USER_ID) 值 (2016,'RDS_BV_RETURN_MAIL_INFO',to_date('09-AUG-23','DD-MON-RR'),'User01','User01',to_date('09-AUG-23','DD-MON-RR'),'User01');

加急出口 : 插入table_name (INT_OBJ_ID,INT_OBJ_NM,CREATE_DT,CREATE_USER_ID,UPDATE_DT,UPDATE_USER_ID) 值 (2016,'RDS_BV_RETURN_MAIL_INFO',SYSDATE,'User01',SYSDATE ,'User01');

有谁知道我们如何解决这个问题?

[我的导出向导截图(以防有帮助)](https://i.stack.imgur.com/C0Lja.png)

我试图找到默认隐式转换的设置,但找不到。甚至试图在 NLS 中提供 SYSDATE,但它需要有效的日期格式。

SQL Oracle-SQL开发人员 日期格式化 DML

评论

2赞 Alex Poole 8/9/2023
Oracle 不知道也不关心该列中的日期值最初是使用 sysdate 还是日期文字或函数调用等填充的,它只关心实际值是多少。这是您在查询表时看到的内容,也是导出工具用于创建 insert 语句的内容。您是否担心,因为当您运行导入(即执行生成的插入语句)时,它会将时间部分设置为午夜;还是因为您想在运行导入时将所有值更改为当前日期/时间?
0赞 Sakshi 8/11/2023
是的,导入时我想@AlexPoole插入某些字段的当前日期。所以,我正在寻找一个解决方案。谢谢你的评论。
0赞 Alex Poole 8/11/2023
然后,您需要执行 Littlefoot 建议的操作之一,或者添加(临时?)触发器以使用 sysdate 覆盖插入中提供的日期,或者将插入脚本中的任何调用替换为 .(我还建议您在导出之前更改NLS_DATE_FORMAT以包含时间元素,否则您未覆盖的任何日期仍将设置为午夜。to_date(...)sysdate

答:

0赞 Littlefoot 8/9/2023 #1

导出提取它在该列中找到的内容。它没有找到(作为函数名称),而是在插入时函数返回的值,显然,对于该行,它是 2023 年 8 月 9 日。SYSDATESYSDATE

导出(实际上是编程的人)选择使用具有适当格式掩码的函数:。to_dateto_date('09-AUG-23', 'DD-MON-RR')

不过,我宁愿看到不同的东西,例如.您当然无法将“AUG”插入到我的克罗地亚语数据库中 - 当然,并非没有额外的设置(更改会话以设置格式模型和语言)。to_date('09.08.2023', 'dd.mm.yyyy')

我不认为你可以出口。但是,您可以做的是从导出中省略日期列:在“指定数据”步骤中,不要包含所有列 () - 单击铅笔按钮并取消选中日期列。然后,在目标端,将列的默认值设置为 ,例如SYSDATE*sysdate

alter table target_table modify date_column default sysdate;

或在插入后手动填充它,例如

update target_table set date_column = sysdate where date_column is null;

评论

0赞 gsalem 8/9/2023
sqldev 在这些语句中使用的日期格式是它在 NLS 设置中找到的格式。
0赞 Littlefoot 8/9/2023
右;但不能保证目标数据库具有相同的 NLS 设置,@gsalem。这就是为什么我宁愿看到更“中性”的格式蒙版。谢谢你的评论!