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??