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 :

Type de données


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Points : 50
    Points
    50
    Par défaut Type de données
    Bonjour,

    je créé un package dans lequel je définis un type de données.
    Ce type je le déclare ensuite comme un paramètre dans une fonction et j'ai une erreur de compilation lorsque j'appelle cette fonction.

    Voici le code :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    CREATE OR REPLACE PACKAGE TEST AS
     
      TYPE t_daily_plan IS RECORD (
                                    beginDate DATE,
                                    endDate DATE
                                  );
      TYPE t_planning IS TABLE OF t_daily_plan INDEX BY BINARY_INTEGER;
     
      PROCEDURE CALCULATE_SLA;
      FUNCTION DIFFERENCE_BETWEEN_IN_SECOND(debutPeriode DATE, finPeriode DATE, planning t_planning, code_plan NUMBER ) RETURN NUMBER;
     
     
     END;
     
    CREATE OR REPLACE PACKAGE BODY test AS
     
     
    PROCEDURE CALCULATE_SLA
      AS
        ref_time DATE := SYSDATE;
        ref_time_plus DATE := SYSDATE + 1;
        curPlan NUMBER := -1;
     
     
        planning t_planning;
    BEGIN
    ....
     
    planning(1).beginDate = SYSDATE -2;
    planning(1).beginDate = SYSDATE +2;
     
    tabGrpSla(1) := 0;
    tabGrpSla(1) := tabGrpSla(1) +
                                            DIFFERENCE_BEETWEEN_IN_SECOND(ref_time_plus, ref_time,
                                                                          planning,
                                                                          curPlan);
     
    END;
     
     
    FUNCTION DIFFERENCE_BETWEEN_IN_SECOND(debutPeriode DATE, finPeriode DATE, planning t_planning,
                                                             code_plan NUMBER ) RETURN NUMBER
    IS
    BEGIN
    ....
    END;
     
    END;
    Comment procéder ?

    Merci

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    Bonjour,

    Quelle erreur exactement ?
    Cordialement.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Points : 807
    Points
    807
    Par défaut RTFM ?
    Comment proceder?
    Lire l'erreur, et voir la ligne qui y correspond.

    Une erreur de compilation, en regle generale le compilateur indique la ligne, et quelle est l'erreur.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Points : 50
    Points
    50
    Par défaut
    Voici le message d'erreur

    PLS-00306: numéro ou types d'arguments erronés dans appel à 'DIFFERENCE_BEETWEEN_IN_SECOND'

    C'est la première fois que j'utilise cette notion de Type que je ne connais pas le mode de fonctionnement et de ce fait je pense que c'est là que le problème se trouve.

    Merci

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    Ta fonction possede bien une clause RETURN ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	FUNCTION DIFFERENCE_BETWEEN_IN_SECOND(	debutPeriode DATE
    					, 	finPeriode DATE
    					, 	planning t_planning
    					,	code_plan NUMBER ) 
    	RETURN NUMBER
    	IS
    	BEGIN
    	....
            RETURN .... ;
    	END;
    Cordialement.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Points : 807
    Points
    807
    Par défaut
    Comment proceduer, etape 2:
    Le numero de ligne, ca situe ou se situe l'erreur. C'est pas un jeu de devinette.
    Et, tres important, lire le message d'erreur en essayant de le comprendre...


    Le probleme se situe dans l'appel a la fonction, pas dans la fonction. En gros, en lisant le message d'erreur on situe l'origine du probleme. Et la vous ne nous montrez pas du tout ce qu'il faut pour qu'on puisse vous aider.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Points : 50
    Points
    50
    Par défaut
    Pour ORA-OO7:

    la fonction possède bien un return number.


    Pour Rams7s :
    l'appel de la fonction posant problème est en exemple dans la première entête de code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tabGrpSla(1) := tabGrpSla(1) +
                                            DIFFERENCE_BEETWEEN_IN_SECOND(ref_time_plus, ref_time, planning,    curPlan);
    J'espère que ces réponses vous éclairent sur mon problème.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Points : 50
    Points
    50
    Par défaut
    J'ai avancé dans la recherche du problème. En fait le programme prenait une autre fonction.

    Le problème maintenant, c'est qu'il ne reconnaît pas la fonction.
    PLS-00201: l'identificateur 'DIFFERENCE_BEETWEEN_IN_SECOND' doit être déclaré

    Comment appelle t-on une fonction à l'intérieure d'un package d'une autre fonction appartenant à ce package ?

    Merci

  9. #9
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    L'appel de fonction à l'intérieur d'un même package marche comme tu l'as codé.
    Tu peux préciser nom_du_package.nom_fonction, mais ce n'est pas utile.

    Si la fonction n'est pas déclarée en entête de package, alors il faut que le corps de la fonction soit avant le code de la procédure qui l'appelle, mais ce n'est pas ton cas vu que tu as déclaré en entête.

    Le code a changé depuis le premier post ?
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Points : 807
    Points
    807
    Par défaut ORA -20001 : Lire le message en prenant son temps


    D'apres le code que vous avez poste au debut:
    Ligne 42 et 35:
    BETWEEN et BEETWEEN


    Plus serieusement, je vais probablement avoir l'air d'insister tres lourdement, mais jusque la, lire le message d'erreur repond a la question.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Points : 50
    Points
    50
    Par défaut
    Merci à tous pour votre aide

    pour Rams7s un e fait toute la différence.

    Un regard extérieur fait la différence.

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

Discussions similaires

  1. interbase : types de donnés : AutoIncrement et Date ???
    Par delphien dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/04/2004, 17h29
  2. Type pour données de type email avec @
    Par jeff37 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/01/2004, 14h50
  3. Types de données interbase
    Par Clotilde dans le forum InterBase
    Réponses: 2
    Dernier message: 18/11/2003, 14h10
  4. Réponses: 2
    Dernier message: 22/09/2003, 11h23
  5. Convertir un type de donnée sous SQL Server
    Par Fleep dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/08/2003, 15h15

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