IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Pb de type


Sujet :

Langage SQL

  1. #1
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 14
    Par défaut Pb de type
    Bonjour,

    supposons une table TRSCOMPTT avec un champ IDCASE et une vingtaine d'autres champs.

    IDCASE permet de distinguer les types de lignes.

    Les lignes de type B1 doivent avoir les champs numéro 2, 3, 4 obligatoires

    Les lignes de type B2 doivent avoir les champs numéro 2, 3, 6 obligatoires

    Les lignes de type B2 doivent avoir les champs numéro 8, 10, 11 obligatoires

    ...

    Pour vérifier que chaque type de lignes a ses champs obligatoires de renseigné, j'ai créé une petite routine s'appuyant sur une table de paramétrage REFVCASET contenant un champ IDCASE, et un champ IDCHAMP. Cette table donne pour chaque case, les champs obligatoires.

    Le jeu consiste à lister les lignes dont les champs obligatoires ne sont pas renseignés pour la case. Voici mon bout de code qui ne me ramène rien alors qu'il devrait. Le pb vient probablement de "l'égalité" REC_CHAMP.IDCHAMP is null. Il faudrait transformer le résultat du curseur en un champ... Qui sait faire ?

    /* Sélection des données transmises par Arvato */
    cursor CUR_CASE is
    select distinct IDCASE from TRSCOMPTT;

    /* Curseur de sélection des champs obligatoire par case */
    cursor CUR_CHAMP (v_idcase varchar2) is
    select IDCHAMP
    from REFVCASET


    for REC_CASE in CUR_CASE loop
    for REC_CHAMP in CUR_CHAMP (REC_CASE.IDCASE) loop
    /* Insertion des enregistrements rejetés */
    insert into EXPCOMPTT (MSCPT,ETAT,IDCASE,IDSOCAS,
    IDTITRE,NOPARUT,IDFAPRD,IDARTIC,
    IDPAYS,IDGRP,IDTYRGL,IDSOCASD,
    IDTITRED,NBEX,MTTTC,IDTVARG,
    IDTVATY,TXTVA,MTHT,MTTVA)
    select MSCPT,ETAT,IDCASE,IDSOCAS,
    IDTITRE,NOPARUT,IDFAPRD,IDARTIC,
    IDPAYS,IDGRP,IDTYRGL,IDSOCASD,
    IDTITRED,NBEX,MTTTC,IDTVARG,
    IDTVATY,TXTVA,MTHT,MTTVA
    from TRSCOMPTT
    where IDCASE = REC_CASE.IDCASE
    and REC_CHAMP.IDCHAMP is null;

    end loop;
    end loop;

    commit;

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 039
    Billets dans le blog
    6
    Par défaut
    En SQL la notion de "champ" n'existe pas. On parler de colonne.

    De plus les bases de données relationelles ne connaissent en aucun cas le moindre concept d'ordre tel que la numérotation d'une colonne. Cela c'est de la pure fantaisie. Dès lors ta manipulation s'avère impossible en pratique. En revanche, c'est possible avec les noms des colonnes.

    Décrit donc ta table en respectant ceci http://www.developpez.net/forums/viewtopic.php?t=32668 et nous t'aiderons.

    La solution de ton problème passe par l'implémentationn d'un trigger.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 14
    Par défaut
    Désolé l'indentation, je n'ai pas trouvé comment faire !

    Voici les tables

    CREATE TABLE TRSCOMPTT
    (
    MSCPT VARCHAR2(6) NOT NULL,
    ETAT VARCHAR2(6) NOT NULL,
    IDCASE VARCHAR2(3) NOT NULL,
    IDSOCAS VARCHAR2(6),
    IDTITRE VARCHAR2(6),
    NOPARUT INTEGER,
    IDFAPRD VARCHAR2(2),
    IDARTIC VARCHAR2(12),
    IDPAYS VARCHAR2(2),
    IDGRP VARCHAR2(10),
    IDTYRGL VARCHAR2(2),
    IDSOCASD VARCHAR2(6),
    IDTITRED VARCHAR2(6),
    NBEX NUMBER(12,6),
    MTTTC NUMBER(18,6),
    IDTVARG VARCHAR2(2),
    IDTVATY VARCHAR2(2),
    TXTVA NUMBER(6,3),
    MTHT NUMBER(18,6),
    MTTVA NUMBER(18,6)
    )
    TABLESPACE DATATRANS
    PCTUSED 40
    PCTFREE 10
    INITRANS 1
    MAXTRANS 255
    STORAGE (
    INITIAL 5M
    NEXT 2M
    MINEXTENTS 1
    MAXEXTENTS 2147483645
    PCTINCREASE 0
    FREELISTS 1
    FREELIST GROUPS 1
    BUFFER_POOL DEFAULT
    )
    LOGGING
    NOCACHE
    NOPARALLEL;


    CREATE TABLE REFVCASET
    (
    IDCASE VARCHAR2(3) NOT NULL,
    IDCHAMP VARCHAR2(8) NOT NULL
    )
    TABLESPACE DATAREF
    PCTUSED 40
    PCTFREE 10
    INITRANS 1
    MAXTRANS 255
    STORAGE (
    INITIAL 56K
    NEXT 24K
    MINEXTENTS 1
    MAXEXTENTS 2147483645
    PCTINCREASE 0
    FREELISTS 1
    FREELIST GROUPS 1
    BUFFER_POOL DEFAULT
    )
    LOGGING
    NOCACHE
    NOPARALLEL;

  4. #4
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 14
    Par défaut Game over !
    Je m'en suis sorti comme cela finalement ! Création d'une requete dans une variable et execution de cette requete

    for REC_CASE in CUR_CASE loop
    for REC_CHAMP in CUR_CHAMP (REC_CASE.IDCASE) loop
    /* Insertion des enregistrements rejetés */

    W_REQ:='insert into EXPCOMPTT (MSCPT,ETAT,IDCASE,IDSOCAS,
    IDTITRE,NOPARUT,IDFAPRD,IDARTIC,
    IDPAYS,IDGRP,IDTYRGL,IDSOCASD,
    IDTITRED,NBEX,MTTTC,IDTVARG,
    IDTVATY,TXTVA,MTHT,MTTVA)
    select MSCPT,ETAT,IDCASE,IDSOCAS,
    IDTITRE,NOPARUT,IDFAPRD,IDARTIC,
    IDPAYS,IDGRP,IDTYRGL,IDSOCASD,
    IDTITRED,NBEX,MTTTC,IDTVARG,
    IDTVATY,TXTVA,MTHT,MTTVA
    from TRSCOMPTT
    where IDCASE = '''||REC_CASE.IDCASE || ''' and ' || REC_CHAMP.IDCHAMP||' is null';

    CURSOR_NAME:=DBMS_SQL.OPEN_CURSOR;
    dbms_sql.parse(CURSOR_NAME,W_REQ,DBMS_SQL.native);
    RET:=dbms_sql.execute(CURSOR_NAME);
    dbms_sql.close_cursor(CURSOR_NAME);

    end loop;
    end loop;

Discussions similaires

  1. programmation corba: le type "sequence"
    Par Kali dans le forum CORBA
    Réponses: 4
    Dernier message: 28/08/2005, 16h09
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo