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

SQL Oracle Discussion :

Question sur les fonctions ORACLE


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Question sur les fonctions ORACLE
    Bonjour

    j'ai créé 3 types dans mon schéma
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    create or replace TYPE LOCK_OBJECT AS OBJECT (TABLENAME VARCHAR2(30), id NUMBER(19,0))
    create or replace TYPE NUM_ARRAY AS TABLE OF NUMBER(19,0);
    create or replace TYPE LOCK_OBJECT_ARRAY AS TABLE OF LOCK_OBJECT
     
    Est ce possible de créer une fonction qui prend en paramètre un type et qui retourn un type 
    exemple :
     
    CREATE OR REPLACE FUNCTION gui_lock_objects
        (
        p_locked_objects IN lock_object_array
       ,p_user_id IN NUMBER(19,0)
        ) 
    RETURN num_array 
    AS 
      global_version_array num_array := num_array();
     
      CURSOR cu_objs IS
        SELECT *
        FROM p_locked_objects;
     
    BEGIN
      FOR rc_obj IN cu_objs
      LOOP
        INSERT
        INTO st_lockobjectopp_2(internalkey,   tablename,   classid,   userid,   acquired,   sessionauditid)
        VALUES(1, rc_obj.tablename,   rc_obj.id,   p_user_id,   sysdate(),   sys_context('userenv',   'SESSIONID'));
        EXECUTE IMMEDIATE 'select version from ' || rc_obj.tablename || ' where internalkey = ' || rc_obj.id
        INTO global_version;
        global_version_array.extend;
        global_version_array(global_version_array.COUNT) := global_version;
      END LOOP;
     
      COMMIT;
      RETURN global_version_array;
      -- dbms_lock.sleep(5);
    END gui_lock_objects;

    j'arrive pas à compiler la fonction

    Merci pour votre aide

    Oracle 10.2.0.2
    OS Linux

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ,p_user_id IN NUMBER(19,0)
    par

  3. #3
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    j'arrive pas à compiler la fonction
    Alors ça, c'est vraiment la dernière information qui nous interesse !
    ça ne donne aucune indication à personne.
    Fournissez au moins l'erreur obtenue su vous voulez que l'on vous aide

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par SheikYerbouti
    Alors ça, c'est vraiment la dernière information qui nous interesse !
    ça ne donne aucune indication à personne.
    Fournissez au moins l'erreur obtenue su vous voulez que l'on vous aide


    Error(4,24): PLS-00103: Encountered the symbol "(" when expecting one of the following: := . ) , @ % default character The symbol ":=" was substituted for "(" to continue.

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par laurentschneider
    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ,p_user_id IN NUMBER(19,0)
    par

    j'ai remplacé et j'ai le message d'erreur suivant :
    Error(11,5): PL/SQL: SQL Statement ignored
    Error(12,10): PL/SQL: ORA-00942: table or view does not exist
    Error(17,5): PL/SQL: SQL Statement ignored
    Error(19,35): PLS-00364: loop index variable 'RC_OBJ' use is invalid
    Error(19,42): PL/SQL: ORA-00984: column not allowed here
    Error(20,5): PL/SQL: Statement ignored
    Error(20,49): PLS-00364: loop index variable 'RC_OBJ' use is invalid
    Error(23,5): PL/SQL: Statement ignored
    Error(23,57): PLS-00201: identifier 'GLOBAL_VERSION' must be declared

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par Fakhry
    PL/SQL: ORA-00942: table or view does not exist
    sans doute que la table ou vue n'existe pas

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut


    Je crois qu'il faut simplement suivre les erreurs qui te sont décrites (Ex: Table inexistante ligne 12, colonne 10 etc...).

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    C'est bon j'ai reglé le probleme
    en Fait on a pas le droit de faire un select * sur un type d'object

    j'ai utilisé un :

    for i in p_locked_objects.FIRST..p_locked_objects.LAST loop

    à la place du curseur


    Merci pour vos réponses

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    CREATE OR REPLACE
    FUNCTION gui_lock_objects(p_locked_objects IN lock_object_array,   p_user_id IN NUMBER) 
    RETURN num_array 
    AS 
      global_version_array num_array := num_array();
      global_version number;
     
     
    BEGIN
      for i in p_locked_objects.FIRST..p_locked_objects.LAST
      LOOP
        INSERT
        INTO st_lockobjectopp_2(internalkey,   tablename,   classid,   userid,   acquired,   sessionauditid)
        VALUES(1, p_locked_objects(i).tablename,   p_locked_objects(i).id,   p_user_id,   sysdate(),   sys_context('userenv',   'SESSIONID'));
        EXECUTE IMMEDIATE 'select version from ' || p_locked_objects(i).tablename || ' where internalkey = ' || p_locked_objects(i).id
        INTO global_version;
        global_version_array.extend;
        global_version_array(global_version_array.COUNT) := global_version;
      END LOOP;
     
      COMMIT;
      RETURN global_version_array;
      -- dbms_lock.sleep(5);
    END gui_lock_objects;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. question sur les fonctions passées à GLUT
    Par Plomeg dans le forum GLUT
    Réponses: 3
    Dernier message: 09/02/2008, 13h58
  2. question sur les grant (oracle 10g)
    Par awalter1 dans le forum Administration
    Réponses: 1
    Dernier message: 30/01/2007, 16h37
  3. Diverses questions sur les fonctions de conversion
    Par Louis-Guillaume Morand dans le forum Access
    Réponses: 12
    Dernier message: 27/12/2006, 10h56
  4. [Dates] Question sur les fonctions Date
    Par cerede2000 dans le forum Langage
    Réponses: 2
    Dernier message: 28/10/2006, 17h26
  5. Question sur les fonctions "send()" et "recv(
    Par damien99 dans le forum MFC
    Réponses: 6
    Dernier message: 10/02/2006, 20h47

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