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

PL/SQL Oracle Discussion :

PL/SQL oracle application express


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Par défaut PL/SQL oracle application express
    bonsoir
    j'ai vraiment besoin de votre aide ,depuis le matin je n'arrive pas à trouver la source du problème !
    bref,je suis en traîne de créer une application sous apex (Oracle Application express)
    et bien j'ai 3 tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    *personne ;
    *personnemorale (personne morale)
    *personnephysique (personne physique)
    personnemorale et la table ersonnephysique héritent de la table "personne" CRISQUE( c'est une colonne qui continet code risque et qui est une clé primaire).
    et bin ,pour incrémenter CRISQUE j'ai écris ce code qui prend le max de " Crisque" et l’incrémente .
    avant d'oublier j'ai dans la table personne,une colonne "type personne" égale à *p =>personne physique
    *m =>personne physique .
    voici le code PL/SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BEGIN
    IF :P11_TYPEPERSONNE = 'm'
      THEN SELECT MAX(CRISQUE) + 1 FROM PERSONNEMORALE;
    ELSEIF :P11_TYPEPERSONNE = 'p'
      THEN SELECT MAX(CRISQUE) + 1 FROM PERSONNEPHYSIQUE;
    ENDIF;
    END;
    lorsque j’exécute l'app , voici l'erreur :
    ORA-06550: line 1, column 27: PLS-00103: Encountered the symbol "IF" when expecting one of the following: ( - + case mod new not null avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date pipe


    ERR-1020 Error in PLSQL item processing (function).
    si quelqu'un peut m'aider ,je serais très reconnaissante



    a+

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Ecrire du code qui prend le max c'est complètement erroné avec Oracle.
    Mais, pour répondre à votre question, en PL/SQL vous ne pouvez pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT MAX(CRISQUE) + 1 FROM PERSONNEMORALE;
    Vous devez faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT MAX(CRISQUE) + 1 
      INTO :l_variable
    FROM PERSONNEMORALE;

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Par défaut
    Merci pour votre réponse, en faite c'est là ou vient le problème !
    SVP, j'ai dans la table personne une colonne nommé "nomrs".
    cette colonne doit conteneir :
    si typepersonne est "p" => une concaténation entre nom et prenom.
    si typepersonne est "m" => la colonne "RAISONSOCIALE".

    donc ceci doit être le résultat d'un prog PL/SQL qui contient une rêquette (UPDATE) .
    mais le problémé c'est que je ne connais où je doit mettre la requête au niveau
    de l'application autrement dit dans quelle page???

    au niveau de mon application, j'ai une page ou il ya les champs de personne (sauf nomrs ) et dés que l'utilisateur choisi le type de personne, des champs content les colonnes de la table personnemorale ou personnephysique s'affiche suivant le choix de type.

    et puis lorsque l'utilisateur appuie sur le bouton "ajout" on se branche vers une autre page.
    cette derniere comporte du langage PL/SQL qui permet l'ajout des personnes .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    declare
    begin
    insert into personne values(:P11_CRISQUE,:P11_ADRESSE,:P11_RAISONSOCIALE,:P11_TYPEPERSONNE);
       CASE :P11_TYPEPERSONNE
    		when 'p' then
    			insert into personnephysique  values(:P11_CRISQUE,:P11_NOM,:P11_PRENOM,:P11_DTNAISSANCE,:P11_LIEUNAISSANCE,:P11_NUMEROPI,:P11_DTDPI,:P11_TYPEPI);
     
    		when 'm' then
    			insert into personnemorale  values(:P11_CRISQUE,:P11_RAISONSOCIALE,:P11_FORMEJURIDIQUE,:P11_CAPITAL,:P11_DTRC,:P11_NUMERORC,:P11_ASSOCIES);
      end CASE;
     
    end;
    ICI nomrs reçoit par défaut Raisonsociale mais ce n'est pas vraiment la réalité des choses.


    je pense à ajouter un champs qui soit "HIDDEN AND PROTECT" et dont la type de source un prog PL/SQL qui contient UPDATE pour nomrs .


    j'éspere que vous n'êtes pas perdue et merci d'avance .

Discussions similaires

  1. Oracle Application Express
    Par zargo dans le forum Débuter
    Réponses: 2
    Dernier message: 14/10/2009, 16h16
  2. Réponses: 2
    Dernier message: 28/01/2009, 16h40
  3. [debutant]oracle application express!?
    Par ChristopheOce dans le forum Oracle
    Réponses: 2
    Dernier message: 10/10/2007, 08h04
  4. Oracle Application Express
    Par goplay dans le forum Oracle
    Réponses: 2
    Dernier message: 15/05/2006, 08h40

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