2010-06-28 7 views
1

est-il utilisé sous la forme correcte en PL/SQL?cette fonction est-elle vraie PL/SQL?

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

thx

+0

Que voulez-vous dire "vrai"? La norme? Je ne crois pas que 'TRUNC' soit SQL standard, je pense que c'est une chose PL/SQL. –

+0

que voulez-vous dire? – nickf

+1

On dirait faux SQL à moi. –

Répondre

2

Il n'est pas PL/SQL (ce qui est l'extension de la procédure d'Oracle à SQL). ADD_MONTHS est, je crois, SQL spécifique à Oracle.

Vous ne savez pas si l'utilisation de TRUNC pour supprimer la partie jour/mois d'une date/heure est également spécifique à Oracle.

2

Cette instruction est valide Oracle SQL: vous ajoutez six mois au hiredate, puis renvoyez le premier jour de ce mois dans un format spécifique.

Cependant, si vous voulez l'utiliser dans PL/SQL que vous devez le retourner dans une variable (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; 

Bien sûr, il est probable que vous avez plus d'un enregistrement dans votre EMP table. Donc, vous devez soit de limiter la requête pour renvoyer une seule ligne, ou vous devez utiliser une variable capable de gérer plusieurs lignes comme une collection PL/SQL ou un curseur:

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

Il ne peut pas être PL/SQL mais c'est (presque) valable Oracle SQL. Le seul problème que je peux voir est que le 'Le' dans le modèle de format in doit être cité pour que cela fonctionne car c'est juste un texte aléatoire qu'Oracle chercherait autrement à trouver.

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

+1 - en citant des littéraux dans un format de date. –