Création d'une procédure ORACLE/ sql

champs_obligatoire Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
champs_obligatoire Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai le code suivant qui doit se répéter 140 fois, j'ai fait un teste manuelle ça marche mais je n'ai pas finis tous les champs vu qu'il doit se faire automatiquement à chaque saisi ! donc je veux créer une procédure je ne connaissais pas avant que ça existe un truc automatique qui exécute un code ou qui génère un code !! en fin voici le code que je veux le transformer en une seule procédure, j'ai l'algorithme ou la logique en tète mais pas les instructions ! pouvez vous m'aider s'il vous plait

create OR REPLACE view V_FORMULAIRE_IP as

  SELECT 

    -- CHAMP 1 : Lieu de réalisation
     , (SELECT CHA_VALUE 
        FROM TA_CHAMP CHA
          INNER JOIN TA_TYPE_CHAMP TCH ON TCH.ID_TYPECHAMP = CHA.ID_TYPECHAMP
        WHERE ID_DOSSIER = DOS.ID_DOSSIER
          AND TCH_ORDRE = 1) AS CHAMP1

     -- CHAMP 2 : Responsable légal
     , (SELECT CHA_VALUE
        FROM TA_CHAMP CHA
          INNER JOIN TA_TYPE_CHAMP TCH ON TCH.ID_TYPECHAMP = CHA.ID_TYPECHAMP
        WHERE ID_DOSSIER = DOS.ID_DOSSIER
          AND TCH_ORDRE = 2) AS CHAMP2

     -- CHAMP 3 : Nom du projet
     , (SELECT CHA_VALUE
        FROM TA_CHAMP CHA
          INNER JOIN TA_TYPE_CHAMP TCH ON TCH.ID_TYPECHAMP = CHA.ID_TYPECHAMP
        WHERE ID_DOSSIER = DOS.ID_DOSSIER
          AND TCH_ORDRE = 3) AS CHAMP3

   .
   .
   . ect ect ...



voila on voit bien qu'on a le même code, avec un TCH_ORDRE = 3 qui s'augmente de 1 chaque fois et un champ(i) avec un i qui s augmente aussi de 1 à chaque fois !

Je veux faire ca en faite l'idée :

create procedure ... 

SELECT CHA_VALUE
FROM TA_CHAMP CHA
INNER JOIN TA_TYPE_CHAMP TCH ON TCH.ID_TYPECHAMP = CHA.ID_TYPECHAMP
WHERE ID_DOSSIER = DOS.ID_DOSSIER
AND TCH_ORDRE = i) AS CHAMP.i
i++ !!!

c'est juste une idée apres la syntaxe c'est faux !

je vous remercie

1 réponse

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,
    Déjà..il serait bien d'indiquer dans quel SGBD ...
    Ensuite, un DUMP (au moins de la strcture + quelques données de test) serait le bienvenu

    Et enfin...
    Pourquoi ne fais tu pas simplement un truc du genre (pas testé)
    SET @row_number:=0;
    SELECT @row_number:=@row_number+1 as Rang
                  , CHA_VALUE
    FROM TA_CHAMP CHA as CHAMP
    INNER JOIN TA_TYPE_CHAMP TCH ON TCH.ID_TYPECHAMP = CHA.ID_TYPECHAMP
     WHERE ID_DOSSIER = DOS.ID_DOSSIER
     AND TCH_ORDRE =  @row_number)
    

    1
    1. champs_obligatoire Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour et Merci,

      C'est dans Oracle en fait,

      Vous penser que le code suivant est correcte ?


      CREATE PROCEDURE ma_procedure () AS
         
         BEGIN
            SET @row_number:=0;
      SELECT @row_number:=@row_number+1 as Rang
                    , CHA_VALUE
      FROM TA_CHAMP CHA as CHAMP
      INNER JOIN TA_TYPE_CHAMP TCH ON TCH.ID_TYPECHAMP = CHA.ID_TYPECHAMP
       WHERE ID_DOSSIER = DOS.ID_DOSSIER
       AND TCH_ORDRE =  @row_number)
         END;
      /


      MERCI
      0
    2. champs_obligatoire Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
       
      voici la requette complete que je souhaite la transformer en une seule fonction dynamique

      
      create OR REPLACE view V_FORMULAIRE_IP as
      
        SELECT DOS."ID_DOSSIER",DOS."DOS_ARCHIVE",DOS."DOS_NOM",DOS."DOS_PRENOM",DOS."DOS_CIVILITE",DOS."DOS_DATENAISSANCE",DOS."DOS_ETAT",DOS."DOS_EMAIL",DOS."DOS_DATE_SAISIE",DOS."DOS_DATE_RECEPTION",DOS."DOS_DATE_TRAITEMENT",DOS."DOS_AVIS",DOS."DATE_CREATION",DOS."DATE_MODIFICATION",DOS."DOS_RUE",DOS."DOS_CP",DOS."DOS_VILLE",DOS."ID_PROCEDURE"
       
          -- CHAMP 1 : Lieu de réalisation
           , (SELECT CHA_VALUE
              FROM TA_CHAMP CHA
                INNER JOIN TA_TYPE_CHAMP TCH ON TCH.ID_TYPECHAMP = CHA.ID_TYPECHAMP
              WHERE ID_DOSSIER = DOS.ID_DOSSIER
                AND TCH_ORDRE = 1) AS champ_1
       
           -- CHAMP 2 : Responsable légal
           , (SELECT CHA_VALUE
              FROM TA_CHAMP CHA
                INNER JOIN TA_TYPE_CHAMP TCH ON TCH.ID_TYPECHAMP = CHA.ID_TYPECHAMP
              WHERE ID_DOSSIER = DOS.ID_DOSSIER
                AND TCH_ORDRE = 2) AS champ_2
       
           -- CHAMP 3 : Nom du projet
           , (SELECT CHA_VALUE
              FROM TA_CHAMP CHA
                INNER JOIN TA_TYPE_CHAMP TCH ON TCH.ID_TYPECHAMP = CHA.ID_TYPECHAMP
              WHERE ID_DOSSIER = DOS.ID_DOSSIER
                AND TCH_ORDRE = 3) AS champ_3
       
       
        FROM TA_DOSSIER DOS
        WHERE ID_PROCEDURE IN (6253)
      
      
      0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Est-ce que au moins... tu as testé la requête que je t'ai donné sans la mettre dans une procédure ??? (car je n'ai jamais parlé de procédure...)
      0
    4. champs_obligatoire Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
       
      yes j'ai testé j'ai eu :


      sql> SET @row_number:=0
      [2018-09-12 15:10:23] [42000][922] ORA-00922: option erronée ou absente


      et j'ai pensé au procédure :O !
      0
    5. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      en même temps... je t'ai donné ce code sans savoir sous quel SGBD tu étais.... je me suis basé sur mysql.
      Faudra voir pour oracle... mais je n'en fait plus depuis longtemps... désolé.
      0