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 :

créer une fonction en pl/sql


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Par défaut créer une fonction en pl/sql
    SALUT,
    j'ai crée ma focntion
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Create or replace Function <density> [()] return <float>
     
    SET serveroutput ON SIZE 1000000
    is
    nom_table 			   dba_tab_columns.table_name%TYPE;
     
    nb_valeurs_total              Number:=0;
     
    nb_valeur_non_null_par_col NUMBER := 0;
     
    nb_colonnes            NUMBER := 0;
    d                       float := 0;
    nb_total               Number:=0;
     
    nb_totals                 Number:=0;
     
    requete 			   VARCHAR2(200);
     
    BEGIN
     
    FOR colonnes_nullables IN (SELECT table_name,column_name
     
    		  FROM user_tab_columns  )     
    loop
    	-- réinitialisation des variables si on passe à une autre table
     
    	IF NVL(nom_table,'0') != colonnes_nullables.table_name THEN
     
    	   nom_table := colonnes_nullables.table_name;
     
     
     
    	END IF;
     
         requete := ' SELECT COUNT(*) FROM ' || nom_table;
     
         EXECUTE IMMEDIATE requete INTO nb_total;
     
     
     
         nb_valeurs_total := nb_valeurs_total + nb_total;
     
          requete := 'SELECT COUNT(*) FROM ' ||  nom_table ||' WHERE ' || colonnes_nullables.column_name || ' IS  NOT NULL';
     
    	   EXECUTE IMMEDIATE requete INTO nb_valeur_non_null_par_col;
     
              nb_totals := nb_totals + nb_valeur_non_null_par_col;
     
     
        end loop; 
     
     DBMS_OUTPUT.PUT_LINE(nb_valeurs_total || ' valeur (s)   dans la base');  
     DBMS_OUTPUT.PUT_LINE(nb_totals || ' valeur (s)  NON NULL dans la base ');
     
     d := nb_totals / nb_valeurs_total;
     
     return(d);
    END;
    /
    quand j'execute ce message s'affiche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-04050: procédure, fonction ou nom de package erroné ou absent
    kk1 a une idée??

  2. #2
    Invité
    Invité(e)
    Par défaut
    Des idées, oui :
    Documentes-toi sérieusement sur la syntaxe du PL/SQL.

    http://sheikyerbouti.developpez.com/pl_sql/?page=Chap4

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    qu'est ce que c'est que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <density> [()] return <float>

  4. #4
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Bonjour,

    Je ne veux pas être méchant avec toi, mais ça ressemble à la discussion sur les colonnes nulles que tu as posée. En plus, et j'espére ne pas être médisant
    tu ne fais d'effort pour chercher tout seul... tu veux que les autres trouvent la réponse toi... il faut d'adord chercher sois même.....désolé, mais c'est pour le bien de ce forum :

    Voici ta fonction corrigée :
    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
    Create or replace Function density return float is d float;
    nom_table 			   all_tab_columns.table_name%TYPE;
    nb_valeurs_total              Number:=0;
    nb_valeur_non_null_par_col NUMBER := 0;
    nb_colonnes            NUMBER := 0;
    nb_total               Number:=0;
    nb_totals                 Number:=0;
    requete 			   VARCHAR2(200);
    BEGIN
    FOR colonnes_nullables IN (SELECT table_name,column_name
    		  FROM user_tab_columns  )     
    loop
    	-- réinitialisation des variables si on passe à une autre table
    	IF NVL(nom_table,'0') != colonnes_nullables.table_name THEN
    	   nom_table := colonnes_nullables.table_name;
    	END IF;
         requete := ' SELECT COUNT(*) FROM ' || nom_table;
         EXECUTE IMMEDIATE requete INTO nb_total;
         nb_valeurs_total := nb_valeurs_total + nb_total;
          requete := 'SELECT COUNT(*) FROM ' ||  nom_table ||' WHERE ' || colonnes_nullables.column_name || ' IS  NOT NULL';
    	   EXECUTE IMMEDIATE requete INTO nb_valeur_non_null_par_col;
              nb_totals := nb_totals + nb_valeur_non_null_par_col;
        end loop; 
     DBMS_OUTPUT.PUT_LINE(nb_valeurs_total || ' valeur (s)   dans la base');  
     DBMS_OUTPUT.PUT_LINE(nb_totals || ' valeur (s)  NON NULL dans la base ');
     d := nb_totals / nb_valeurs_total;
     return(d);
    END;
    /

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par LBO72 Voir le message
    désolé, mais c'est pour le bien de ce forum
    Je rappelle qu'il est mentionné dans les régles que le forum n'a pas pour objectif de débugger votre code

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Par défaut
    bonjour,
    Merci pour tous
    vous etes vraiment gentil, mais je suis nouvelle dans le domaine de pl/sql et je suis pressée par le temps.
    Vraiment Merci
    c super ce forum.

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

Discussions similaires

  1. Créer une fonction SQL (syntaxe)
    Par bugland dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 02/03/2014, 17h01
  2. Créer une fonction SQL SERVER
    Par ghir_ana dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/06/2012, 05h49
  3. Créer une fonction SQL avec variable
    Par theuma dans le forum Access
    Réponses: 6
    Dernier message: 18/04/2011, 12h02
  4. Créer une fonction PL/SQL
    Par magic charly dans le forum PL/SQL
    Réponses: 1
    Dernier message: 01/06/2006, 14h20
  5. Créer une fonction mathématique pendant l'exécution
    Par zeprogrameur dans le forum Langage
    Réponses: 5
    Dernier message: 09/07/2004, 11h36

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