Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/08/2007, 15h29   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2007
Messages : 78
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 78
Points : 12
Points : 12
Par défaut créer une fonction en pl/sql

SALUT,
j'ai crée ma focntion
Code :
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 :
ORA-04050: procédure, fonction ou nom de package erroné ou absent
kk1 a une idée??
080983 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 15h37   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
Des idées, oui :
Documentes-toi sérieusement sur la syntaxe du PL/SQL.

http://sheikyerbouti.developpez.com/pl_sql/?page=Chap4
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 15h49   #3
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
qu'est ce que c'est que ça :
Code :
<density> [()] RETURN <float>
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 15h57   #4
Membre confirmé
 
Avatar de LBO72
 
Inscription : mai 2007
Messages : 385
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 385
Points : 282
Points : 282
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 :
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;
/
LBO72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 16h08   #5
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 16h45   #6
Candidat au titre de Membre du Club
 
Inscription : juillet 2007
Messages : 78
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 78
Points : 12
Points : 12
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.
080983 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h17.


 
 
 
 
Partenaires

Hébergement Web