登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

微软MVP罗勇的博客

微软MVP罗勇,www.luoyong.me

 
 
 

日志

 
 

ORACLE EBS 开发 处理日期  

2011-01-23 08:32:41|  分类: EBS开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

--译者:罗勇,对原文有删减、补充、纠正,不提供翻译质量保证。 

简单翻译下,2000年都过去很久了,而且我们的产品是2000年的产品,肯定考虑了这个问题。

RR日期支持,简单说就是01–JAN–00 到 31–DEC–49被解释为21世纪的年份,01–JAN–50 到31–DEC–99被解释为20世纪的年份。

oracle应用程序使用9999-01-01作为最大的日期,1000-01-01作为最小的日期。

日期格式掩码

默认的格式掩码变量NLS_DATE_FORMAT决定了默认的日期掩码,除非另外指定。Oracle Forms 6.0将日期的显示格式和存储形式分开了。显示日期格式是由变量FORMS60_USER_DATE_FORMAT决定的,这个变量值可以根据语言和地区变化。而oracle应用程序将NLS_DATE_FORMAT的格式设定为DD–MON–RR。你能够在启动FORM SERVER之前在安装时设定FORMS60_USER_DATETIME_FORMAT和FORMS60_USER_DATE_FORMAT。

罗勇补注,这两个变量的值可以通过EBS的帮助>关于oracle applications菜单打开的窗口看到,比如可以是如下设置:

FORMS60_USER_DATETIME_FORMAT : RRRR-MM-DD HH24:MI:SS

FORMS60_USER_DATE_FORMAT : RRRR-MM-DD

日期的规范格式,是YYYY/MM/DD HH24:MI:SS (时间部分可以省略)。这个规范格式是独立的,与语言,地域都没有关系。

oracle日期

oracle 日期的范围从公元前4712-01-01到公元4712-12-31,它由7个字节的2进制数据表示的。oracle日期一共有3,442,447天。所以,公元前4712-01-01这天就是1,公元4712-12-31这天就是3,442,447,公元0001-01-01就是1,721,424。oracle数据库中的date类型就是如此存储的。但是EBS不支持公元前的日期,所以不能使用。

当获取表单中的日期字段的值可以采用这种形式:

x_date_example := TO_DATE(NAME_IN('block.datetime_field'),'DD-MON-YYYY HH24:MI:SS');

这是因为NAME_IN返回的总是字符型。

日期编码规则:

u  将日期作为文本时总是使用日期的规范格式YYYY/MM/DD HH24:MI:SS (时间部分可以省略)。

u  所有将日期转换为字符的都应该使用明显的日期掩码,应该是4位数的年份,而且要与语言无关,推荐使用规范格式。

u  标准的最大日期是9999-01-01,最小日期是1000-01-01。

u  不要使用公元前的日期

u  当需要硬编码日期时,请不要使用与语言相关的月份,而应该使用Julian日期和4位数年份,比如my_date = to_date(’9999/01/01’,’YYYY/MM/DD’)

当使用DECODE或者NVL函数时,应总是提供日期格式,以防止隐式转换,因为隐式转换有可能返回CHAR而不是DATE类型,正确的做法示例如下:

DECODE(char_col,'<NULL>',to_date(null),to_date(char_col,'YYYY/MM/DD'))

在表单中将日期拷贝到一个项目的,不能采用如下的形式:

copy('01-FEB-2001', 'bar.lamb');

相反,你应该采用下面的格式:

app_item.copy_date('01-02-2001', 'bar.lamb');

实际上执行的代码是:

copy(to_char(to_date('01-01-2001', 'DD-MM-YYYY'),'DD-MON-YYYY'), 'bar.lamb');

函数NAME_IN和COPY接受的日期格式是DD–MON–YYYY

SYSDATE 和USER

你应该用如下两个函数分别代替SYSDATE和USER,因为这两个函数的值被缓存起来的,效率更高。

FND_STANDARD.SYSTEM_DATE return DATE;
FND_STANDARD.USER return VARCHAR2;

刚才这两个函数仅用于ORACLE FORMS PL/SQL中,在SQL语句中还是使用SYSDATE和USER。下面是一些建议:

u  在客户端PL/SQL中尽量少用SYSDATE,因为在客户端使用SYSDATE会转换成一个SQL语句,会导致一个到服务器端的来回;

u  SYSDATE和FND_STANDARD.SYSTEM_DATE默认都包括了时间,在对WHO字段中的日期字段进行更新时应包括时间,如果不想包括时间的话,应该显示截断它::BLOCK.DATE_FIELD := TRUNC(FND_STANDARD.SYSTEM_DATE);

对于新记录的日期字段的默认值可以少用$$DBDATE$$。

素格格新疆特产店--做最好新疆特产的搬运工。
本店由博主的新疆老婆开设,搬运各种最好的新疆特产,是自用,送礼,年货,孝敬长辈特别是(岳)父母的首选!
ORACLE EBS 开发  处理日期 - 罗勇 - 罗勇的博客
 
  评论这张
 
阅读(1422)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018