Resolution d'1 exercice pl/sql
Résolu/Fermé
7ammouda
Messages postés
10
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
27 mai 2008
-
26 mars 2008 à 15:48
imoooo Messages postés 14 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 2 juin 2016 - 2 juin 2016 à 18:17
imoooo Messages postés 14 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 2 juin 2016 - 2 juin 2016 à 18:17
A voir également:
- Resolution d'1 exercice pl/sql
- Blob sql ✓ - Forum Webmastering
- Impossible de charger l'image haute résolution messenger ✓ - Forum Mobile
- Sql lister les tables ✓ - Forum Programmation
- Logiciel sql - Télécharger - Bases de données
- Problème résolution écran 1920x1080 ✓ - Forum Windows
9 réponses
sanou2a89
Messages postés
1
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
12 décembre 2009
2
12 déc. 2009 à 16:13
12 déc. 2009 à 16:13
je veu vrmt avoir un cours de pl/sql bien detaillé svp
Utilisateur anonyme
27 mars 2008 à 15:24
27 mars 2008 à 15:24
Regarde juste un peu plus haut tu as la solution. Si tu ne comprends pas poses des questions au lieu de débilement remettre ta demande -_-
ta7founa
Messages postés
1
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
9 avril 2008
3
9 avril 2008 à 22:35
9 avril 2008 à 22:35
slt 7ammouda, t'inquiéte pas
voici la bonne solution :
SET SERVEROUTPUT ON
ACCEPT p_num PROMPT 'Saisissez le nombre d'employés les mieurs rénumérés:'
DECLARE
v_csal NUMBER;
v_count NUMBER;
v_num NUMBER:=&p_num;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
CURSOR emp_cursor IS
SELECT ename, sal FROM emp
ORDER BY sal DESC;
TYPE typ_tab_emp IS TABLE OF emp_cursor%ROWTYPE
INDEX BY BINARY_INTEGER;
tab_emp typ_tab_emp;
BEGIN
SELECT COUNT(DISTINCT SAL), COUNT(SAL) INTO v_csal,v_count FROM EMP;
IF v_num=0 OR v_num>v_count THEN
DBMS_OUTPUT.PUT_LINE('Saisie erronée!');
ELSIF v_csal=v_count THEN
OPEN emp_cursor;
FETCH emp_cursor INTO v_ename, v_sal;
WHILE emp_cursor%ROWCOUNT <= v_num AND emp_cursor%FOUND LOOP
tab_emp(emp_cursor%ROWCOUNT).ename:=v_ename;
tab_emp(emp_cursor%ROWCOUNT).sal:=v_sal;
FETCH emp_cursor INTO v_ename, v_sal;
END LOOP;
CLOSE emp_cursor;
FOR cpt IN 1..v_num LOOP
DBMS_OUTPUT.PUT_LINE('Nom: '||tab_emp(cpt).ename||' et sal: '||tab_emp(cpt).sal);
END LOOP;
ELSE
DBMS_OUTPUT.PUT_LINE('Il y a des employés qui ont le même salaire!');
END IF;
END;
/
voici la bonne solution :
SET SERVEROUTPUT ON
ACCEPT p_num PROMPT 'Saisissez le nombre d'employés les mieurs rénumérés:'
DECLARE
v_csal NUMBER;
v_count NUMBER;
v_num NUMBER:=&p_num;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
CURSOR emp_cursor IS
SELECT ename, sal FROM emp
ORDER BY sal DESC;
TYPE typ_tab_emp IS TABLE OF emp_cursor%ROWTYPE
INDEX BY BINARY_INTEGER;
tab_emp typ_tab_emp;
BEGIN
SELECT COUNT(DISTINCT SAL), COUNT(SAL) INTO v_csal,v_count FROM EMP;
IF v_num=0 OR v_num>v_count THEN
DBMS_OUTPUT.PUT_LINE('Saisie erronée!');
ELSIF v_csal=v_count THEN
OPEN emp_cursor;
FETCH emp_cursor INTO v_ename, v_sal;
WHILE emp_cursor%ROWCOUNT <= v_num AND emp_cursor%FOUND LOOP
tab_emp(emp_cursor%ROWCOUNT).ename:=v_ename;
tab_emp(emp_cursor%ROWCOUNT).sal:=v_sal;
FETCH emp_cursor INTO v_ename, v_sal;
END LOOP;
CLOSE emp_cursor;
FOR cpt IN 1..v_num LOOP
DBMS_OUTPUT.PUT_LINE('Nom: '||tab_emp(cpt).ename||' et sal: '||tab_emp(cpt).sal);
END LOOP;
ELSE
DBMS_OUTPUT.PUT_LINE('Il y a des employés qui ont le même salaire!');
END IF;
END;
/
imoooo
Messages postés
14
Date d'inscription
jeudi 19 mai 2016
Statut
Membre
Dernière intervention
2 juin 2016
2 juin 2016 à 18:17
2 juin 2016 à 18:17
Merciiiii
creer la table "Messages" avec une seule colonne "Results" de tupe "Number(2)"
ecrivez un bloc PL/SQL pour insérer des nombres dans la table "Messages"
A.insérer les nombres de 1 à 10, en excluant 6 et 8.
B.effectuer une validation "commit" avant la fin du bloc.
C.afficher le contenu de la table "Messages" pour tester votre bloc PL/SQL.
ecrivez un bloc PL/SQL pour insérer des nombres dans la table "Messages"
A.insérer les nombres de 1 à 10, en excluant 6 et 8.
B.effectuer une validation "commit" avant la fin du bloc.
C.afficher le contenu de la table "Messages" pour tester votre bloc PL/SQL.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Moerco-fr
Messages postés
5
Date d'inscription
mercredi 2 avril 2008
Statut
Membre
Dernière intervention
19 décembre 2009
3
9 juil. 2008 à 01:08
9 juil. 2008 à 01:08
comme ça, à première vue, mais je n'ai rien pour tester :
create table messages(results number(2)); declare i number(2); begin for i in 1..10 loop if i not in (6,8) then insert into messages values (i); end if; end loop; commit; end; / select * from messages;
Moerco-fr
Messages postés
5
Date d'inscription
mercredi 2 avril 2008
Statut
Membre
Dernière intervention
19 décembre 2009
3
2 avril 2008 à 01:29
2 avril 2008 à 01:29
Bon pour fêter mon inscription sur le forum et comme je me suis amusé à écrire tout ça,je le poste, même si le sujet est marqué comme résolu.
Alors comme je n'ai pas de noyau Oracle sur place, je n'ai pas testé, même pas la syntaxe, mais ça peut donner une idée; ça devrait quand même pas être trop faux, le PL c'est mon métier, même si je ne manipule pas très souvent certaines notions comme les varray utilisés ici.
Alors comme je n'ai pas de noyau Oracle sur place, je n'ai pas testé, même pas la syntaxe, mais ça peut donner une idée; ça devrait quand même pas être trop faux, le PL c'est mon métier, même si je ne manipule pas très souvent certaines notions comme les varray utilisés ici.
set serveroutput on -- enable dbms_output define n=5 declare cursor csr_top_emp is select ename, sal from emp order by sal desc; type top_type is varray(&n) of csr_top_emp%ROWTYPE; top_tab top_type; top_idx pls_integer; idx pls_integer; prev_sal emp.sal%TYPE := -1; exists_same_sal boolean := FALSE; ex_n_to_low exception; begin top_idx := 0; if &n <= 0 then raise ex_n_to_low; end if; -- Parcours des employés par salaire décroissant for csr_rec in csr loop top_idx := top_idx + 1; -- Détection salaires identiques if csr_rec.sal = prev_sal then exists_same_sal := TRUE; end if; prev_sal := csr_rec.sal; -- collecte des top n if top_idx <= &n then top_tab(top_idx) := csr_rec; end if; end loop; -- Affichage de la table des n top salaires DBMS_OUTPUT.put_line(rpad('Employé', 30)||' '||lpad('Salaire', 12)); DBMS_OUTPUT.put_line(rpad(null, 30, '-')||' '||lpad(null, 12, '-')); for idx in 1 .. top_idx loop DBMS_OUTPUT.put_line(rpad(top_tab.ename, 30)||' '||lpad(top_tab.sal, 12)); end loop; -- Affichage Warning si nombre demandé trop grand if top_idx <= &n then DBMS_OUTPUT.put_line('WARNING: Le nombre d''employés est inférieur au nombre demandé'); end if; -- Affichage Warning si existe salaires identiques if exists_same_sal = TRUE then DBMS_OUTPUT.put_line('WARNING: Des employés ont un salaire identique'); end if; exception when ex_n_to_low then DBMS_OUTPUT.put_line('ERROR: Le nombre d''employés demandé ne peut être négatif'); end; /
Utilisateur anonyme
26 mars 2008 à 17:03
26 mars 2008 à 17:03
Voici un début de réponse :
Ça te donne une bonne base pour continuer ;-)
CREATE OR REPLACE PROCEDURE Top_Employe(n IN NUMBER) IS nb_emp NUMBER; CURSOR c_tab_temp IS SELECT ENAME, SAL FROM tab_temp; BEGIN IF n < 0 THEN DBMS_OUTPUT.put_line('Le nombre d''employé ne peut pas être négatif'); return; END IF; SELECT count(ENAME) INTO nb_emp FROM EMP; IF nb_emp < n THEN DBMS_OUTPUT.put_line('Le nombre d''employé dans la table est inférieur à ce que vous demandez'); return; END IF; INSERT INTO tab_temp SELECT ENAME, SAL FROM EMP WHERE ROWNUM < n; COMMIT; --Vérification des salaires identiques --Affichage des données contenues dans le curseur END; /
Ça te donne une bonne base pour continuer ;-)
7ammouda
Messages postés
10
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
27 mai 2008
27 mars 2008 à 13:36
27 mars 2008 à 13:36
je veux Créer un bloc PL/SQL qui détermine les n employés ayant les salaires les plus élevés en utilisant un curseur explicite.
a. La valeur de n est introduite via un paramètre de substitution SQL*PLUS.
b. Récupérez les noms et les salaires des n personnes les mieux rémunérées dans la table EMP et
les enregistrer dans une table PL/SQL.
c. Assurez-vous qu'il n'y a aucun couple d'employés ayant le même salaire.
d. Testez les cas particuliers tels que n = 0 et n > au nombre d’employés dans la table EMP.
e. Affichez le contenu de la table PL/SQL à l’écran.
la structure de la table est la suivante
empno (numero emp)
ename (nom)
job
mgr(manager)
sal(salaire)
hiredate(date d'embauche)
deptno(numéro département)
merci d'avance
a. La valeur de n est introduite via un paramètre de substitution SQL*PLUS.
b. Récupérez les noms et les salaires des n personnes les mieux rémunérées dans la table EMP et
les enregistrer dans une table PL/SQL.
c. Assurez-vous qu'il n'y a aucun couple d'employés ayant le même salaire.
d. Testez les cas particuliers tels que n = 0 et n > au nombre d’employés dans la table EMP.
e. Affichez le contenu de la table PL/SQL à l’écran.
la structure de la table est la suivante
empno (numero emp)
ename (nom)
job
mgr(manager)
sal(salaire)
hiredate(date d'embauche)
deptno(numéro département)
merci d'avance
hasna abir
Messages postés
1
Date d'inscription
dimanche 21 avril 2013
Statut
Membre
Dernière intervention
21 avril 2013
21 avril 2013 à 22:03
21 avril 2013 à 22:03
je besoin d'une solution !!!
écrire une fonction en PL/SQL qui retourne le nombre de laboratoire pour une faculté donnée puis un bloc qui appelle cette fonction et l'expérimente avec quelques laboratoire de la BD
écrire une fonction en PL/SQL qui retourne le nombre de laboratoire pour une faculté donnée puis un bloc qui appelle cette fonction et l'expérimente avec quelques laboratoire de la BD