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

Fermé
champs_obligatoire Messages postés 5 Date d'inscription mercredi 12 septembre 2018 Statut Membre Dernière intervention 12 septembre 2018 - Modifié le 12 sept. 2018 à 15:35
champs_obligatoire Messages postés 5 Date d'inscription mercredi 12 septembre 2018 Statut Membre Dernière intervention 12 septembre 2018 - 12 sept. 2018 à 15:59
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
A voir également:

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
12 sept. 2018 à 15:00
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
champs_obligatoire Messages postés 5 Date d'inscription mercredi 12 septembre 2018 Statut Membre Dernière intervention 12 septembre 2018
Modifié le 12 sept. 2018 à 15:34
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
champs_obligatoire Messages postés 5 Date d'inscription mercredi 12 septembre 2018 Statut Membre Dernière intervention 12 septembre 2018
12 sept. 2018 à 15:48
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
12 sept. 2018 à 15:49
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
champs_obligatoire Messages postés 5 Date d'inscription mercredi 12 septembre 2018 Statut Membre Dernière intervention 12 septembre 2018
12 sept. 2018 à 15:54
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
12 sept. 2018 à 15:56
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