这个函数是真正的PL / SQL吗?

时间:2010-06-28 01:37:40

标签: sql oracle plsql

它是否以正确的形式用于PL / SQL?

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

THX

4 个答案:

答案 0 :(得分:2)

它不是PL / SQL(这是Oracle对SQL的程序扩展)。

ADD_MONTHS,我认为是Oracle特定的SQL。

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

答案 1 :(得分:2)

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

但是,如果要在PL / SQL中使用它,则需要将其返回到某个变量中:

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 :(得分:2)

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

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

答案 3 :(得分:1)

如果您的意思是符合SQL99或SQL92,请使用验证器http://developer.mimer.com/validator/parser99/index.tml