Oracle8.1.7: Problème DECODE PL/SQL
bonjour,
j'ai un souci de procédure PL/Sql.
Oracle Discoverer me génére des requetes SQL, ces requetes je les mets dans une procedure stockée pour générer un fichier CSV j'ai trois type d'erreurs !!
Citation:
Erreur1 PLS-00103: Symbole "CASE" rencontré à la place d'un des symboles suivants :
Erreur2 PLS-00222: la fonction nommée 'DECODE' n'existe pas dans cette étendue
mes questions Comment remplacer le DECODE dans la condition WHERE??
peut on utiliser CASE WHEN en 8.1.7 ?
Merci
REQUETE1: condition where
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| WHERE
((DG_TYPEMARCHECONTRAT = DH_DG_MARCHECONTRAT AND DG_NUMMARCHECONTRAT = DH_DG_NUMMARCHECONTRAT)
and (DH_DG_MARCHECONTRAT = JP_DG_TYPEMARCHECONTRAT AND DH_DG_NUMMARCHECONTRAT = JP_DG_NUMMARCHECONTRAT AND DH_NUMLOT = JP_DH_NUMLOT)
and (JP_DG_TYPEMARCHECONTRAT = KU_JP_TYPEMARCHECONTRAT AND JP_DG_NUMMARCHECONTRAT = KU_JP_NUMMARCHECONTRAT AND JP_DH_NUMLOT = KU_JP_NUMLOT AND JP_NUMLIGNEFOURNISSEUR = KU_JP_NUMLIGNEFOURNISSEUR)
--ERREUR DECODE and (CODE_OPERATION = DECODE(KU_KH_CODEOPERATIONSERVICE,' ',KU_KI_CODEOPERATIONPROGRAMMEE,KU_KH_CODEOPERATIONSERVICE)))
AND (qry5.EXERCICE = TO_NUMBER(TO_CHAR(qry5.DATE_DEBUT,'YYYY')))
AND (TO_CHAR(qry5.DATE_DEBUT,'YYYY') = TO_CHAR(SYSDATE-1,'YYYY'))
AND (TO_CHAR(qry5.DATE_FIN,'YYYY') > TO_CHAR(qry5.DATE_DEBUT,'YYYY'))
AND (qry3.JP_JM_CODETYPEFOURNISSEUR = 'TI') AND
(DATE_MAJ >= TO_DATE(DateMinTrav,'DD/MM/YYYY') AND
DATE_MAJ <= TO_DATE(DateMaxTrav,'DD/MM/YYYY')))
ORDER BY DG_NUMMARCHECONTRAT ASC |
Re: Oracle8.1.7: Problème DECODE PL/SQL
non, case n'est pas supporté en PLSQL 8i
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
SQL> select version from v$instance;
VERSION
-----------------
8.1.7.4.0
SQL> declare cursor c is select case 1 when 1 then 1 end x from dual; begin null; end;
2 /
declare cursor c is select case 1 when 1 then 1 end x from dual; begin null; end;
*
ERROR at line 1:
ORA-06550: line 1, column 28:
PLS-00103: Encountered the symbol "CASE" when expecting one of the following: |
par contre tu dois pouvoir employer decode
Code:
1 2 3 4 5
|
SQL> declare cursor c is select decode(1,1,1) x from dual; begin null; end;
2 /
PL/SQL procedure successfully completed. |
Re: Oracle8.1.7: Problème DECODE PL/SQL
Essaye comme çà ca devrait mieux marcher...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| WHERE DG_TYPEMARCHECONTRAT = DH_DG_MARCHECONTRAT
AND DG_NUMMARCHECONTRAT = DH_DG_NUMMARCHECONTRAT
AND DH_DG_MARCHECONTRAT = JP_DG_TYPEMARCHECONTRAT
AND DH_DG_NUMMARCHECONTRAT = JP_DG_NUMMARCHECONTRAT
AND DH_NUMLOT = JP_DH_NUMLOT
AND JP_DG_TYPEMARCHECONTRAT = KU_JP_TYPEMARCHECONTRAT
AND JP_DG_NUMMARCHECONTRAT = KU_JP_NUMMARCHECONTRAT
AND JP_DH_NUMLOT = KU_JP_NUMLOT
AND JP_NUMLIGNEFOURNISSEUR = KU_JP_NUMLIGNEFOURNISSEUR
AND CODE_OPERATION = DECODE(KU_KH_CODEOPERATIONSERVICE,
' ',KU_KI_CODEOPERATIONPROGRAMMEE,
KU_KH_CODEOPERATIONSERVICE)
AND qry5.EXERCICE = TO_NUMBER(TO_CHAR(qry5.DATE_DEBUT,'YYYY'))
AND TO_CHAR(qry5.DATE_DEBUT,'YYYY') = TO_CHAR(SYSDATE-1,'YYYY')
AND TO_CHAR(qry5.DATE_FIN,'YYYY') > TO_CHAR(qry5.DATE_DEBUT,'YYYY')
AND qry3.JP_JM_CODETYPEFOURNISSEUR = 'TI'
AND DATE_MAJ >= TO_DATE(DateMinTrav,'DD/MM/YYYY')
AND DATE_MAJ <= TO_DATE(DateMaxTrav,'DD/MM/YYYY')
ORDER BY DG_NUMMARCHECONTRAT ASC |
Pour info, si tu n'as que des AND dans tes clauses tes parenthèses ne servent à rien... :wink:
Re: Oracle8.1.7: Problème DECODE PL/SQL
Citation:
Envoyé par dyvim
Pour info, si tu n'as que des AND dans tes clauses tes parenthèses ne servent à rien... :wink:
désolé c'est du code généré je n'y suis pour rien :wink: (cf discoverer d'oracle)
et ça ne fonctionne malheureusement pas :cry:
Re: Oracle8.1.7: Problème DECODE PL/SQL
que veux-tu dire par "ça ne marche pas"
Code:
1 2 3 4 5
|
SQL> declare cursor c is select * from x where CODE_OPERATION = DECODE(KU_KH_CODEOPERATIONSERVICE,
' ',KU_KI_CODEOPERATIONPROGRAMMEE,KU_KH_CODEOPERATIONSERVICE); begin null; end;
2 /
PL/SQL procedure successfully completed. |