2010-06-28 37 views
1

它在PL/SQL中以正确的形式使用吗?是这个函数真正的PL/SQL吗?

SELECT ename 
     ,hiredate 
     , TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'Le DD MONTH YYYY') AS "Révision" 
FROM emp 

THX

+0

你是什么意思“真”?标准?我不相信'TRUNC'是标准的SQL,我认为这是一个PL/SQL的东西。 – 2010-06-28 01:40:23

+0

你是什么意思? – nickf 2010-06-28 01:40:32

+1

对我来说看起来像是错误的SQL。 – 2010-06-28 01:42:48

回答

2

这不是PL/SQL(这是Oracle的过程扩展SQL)。

ADD_MONTHS是,我相信,Oracle特定的SQL。

不确定是否使用TRUNC删除日期/时间的月份部分也是Oracle特定的。

2

该声明是有效的Oracle SQL:您将向hiredate添加六个月,然后以特定格式返回该月的第一天。

但是,如果你想在PL/SQL中使用它,你需要将它返回到一些变量(S):

declare 
    l_ename emp.ename%type; 
    l_hiredate emp.hiredate%type; 
    l_revision varchar2(20); 
begin 
    SELECT ename 
     ,hiredate 
     , TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'Le DD MONTH YYYY') 
    INTO l_ename 
     , l_hiredate 
     , l_revision 
    FROM emp; 
end; 

当然,这可能是你在你的EMP有一个以上的记录表。所以,你要么需要限制查询返回单行,或者你需要使用一个能够处理多行变量,如PL/SQL集合或光标:

.... 
for emp_recs in (SELECT ename 
          ,hiredate 
          , TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'Le DD MONTH YYYY') 
        FROM emp) 
loop 
    ..... 
2

它可能不是PL/SQL,但它(几乎)是有效的Oracle SQL。我能看到的唯一问题是格式模型中的'Le'需要引用才能正常工作,因为这只是Oracle本来想要找到某种含义的随机文本。

SELECT 
    ename, 
    hiredate, 
    TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'"Le" DD MONTH YYYY') 
FROM emp 
+1

+1 - 以日期格式引用文字。 – 2010-06-29 11:36:02