它是否以正确的形式用于PL / SQL?
SELECT ename
,hiredate
, TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'Le DD MONTH YYYY') AS "Révision"
FROM emp
THX
答案 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