{Oracle} script procédure
Fermé
oliv
-
25 juin 2009 à 23:03
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 - 28 juin 2009 à 23:36
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 - 28 juin 2009 à 23:36
Bonjour,
pouvez-vous m'aider à effectuer la procédure pour écrire à l'écran ensemble des heures où une personne est à deux endroits à la fois.
MERCI D'AVANCE
pouvez-vous m'aider à effectuer la procédure pour écrire à l'écran ensemble des heures où une personne est à deux endroits à la fois.
MERCI D'AVANCE
A voir également:
- {Oracle} script procédure
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
- Le point d'entrée de procédure eventsetinformation est introuvable advapi32.dll - Forum Windows
12 réponses
ce n'est pas une histoire de loggin lol voici les tables
Choix : id_o,id_p
Cours : id, ue, promo, options
Etudiant : id, nom, prenom, promo, options
Options : id, intitule
Promo : id, intitule
UE : id, intitule, nbr
On rajoute les tables suivantes :
Salles : id, nom, type
type peut valoir : C (pour cours), TD ou TP.
Profs : id, nom, prenom
Horaire : id, heure_debut, heure_fin
EdT : id, salle, promo, options, ue, prof, type, horaire, jour,
Id est l’identifiant, salle, promo, options, ue prof, horaire sont des clefs étrangères sur les tables salles, promo, options, ue, profs et horaire. Jour peut valoir lundi, mardi, …, dimanche, Type peut valoir C, TD ou TP.
VOICI CE QUE JE DOIS FAIRE
- Une procédure qui écrit à l’écran l’ensemble des horaires où un profs est à deux endroits à la fois.
Choix : id_o,id_p
Cours : id, ue, promo, options
Etudiant : id, nom, prenom, promo, options
Options : id, intitule
Promo : id, intitule
UE : id, intitule, nbr
On rajoute les tables suivantes :
Salles : id, nom, type
type peut valoir : C (pour cours), TD ou TP.
Profs : id, nom, prenom
Horaire : id, heure_debut, heure_fin
EdT : id, salle, promo, options, ue, prof, type, horaire, jour,
Id est l’identifiant, salle, promo, options, ue prof, horaire sont des clefs étrangères sur les tables salles, promo, options, ue, profs et horaire. Jour peut valoir lundi, mardi, …, dimanche, Type peut valoir C, TD ou TP.
VOICI CE QUE JE DOIS FAIRE
- Une procédure qui écrit à l’écran l’ensemble des horaires où un profs est à deux endroits à la fois.
chuka
Messages postés
965
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
378
28 juin 2009 à 20:32
28 juin 2009 à 20:32
Salut,
Y'a peut-etre quelques erreurs... mais tu as la philosophie du truc
@+
CREATE OR REPLACE PROCEDURE ma_procedure IS CURSOR c1 IS SELECT prof,horaire,jour,COUNT(prof) FROM EdT HAVING COUNT(prof)>1 ;--récupère l'id des profs,l'horaire et jour où ils sont à deux endroits différents pour le même horaire cur1 c1%ROWTYPE; nom_p VARCHAR(50); prenom_p VARCHAR(50); BEGIN OPEN c1; FETCH c1 INTO cur1; WHILE c1%FOUND LOOP SELECT nom, prenom INTO nom_p,prenom_p FROM Profs where id=cur1.prof;--selectionne nom du prof et prenom DBMS_OUTPUT.PUT_LINE(nom_p||' '||' '||prenom_p||' '||TO_CHAR(cur1.horaire,'DD/MM/YYYY HH24:MI:ss'));--affiche à l'ecran FETCH c1 INTO cur1; END LOOP; CLOSE c1; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN -- Consider logging the error and then re-raise RAISE; END ma_procedure; /
Y'a peut-etre quelques erreurs... mais tu as la philosophie du truc
@+
chuka
Messages postés
965
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
378
25 juin 2009 à 23:37
25 juin 2009 à 23:37
Salut,
Sur Oracle 10g, tu peux faire un truc du style:
select * from v_$session
ou
select * from V_$SESSION_CONNECT_INFO
J'espere ca pourra t'aider!!
@+
Sur Oracle 10g, tu peux faire un truc du style:
select * from v_$session
ou
select * from V_$SESSION_CONNECT_INFO
J'espere ca pourra t'aider!!
@+
merci pour ta réponse mais il faut que je passe par un create procedure et je suppose par un begin pour faire une boucle.
serait-il possible de m'aider pour l'écriture du script.
MERCI d'AVANCE
serait-il possible de m'aider pour l'écriture du script.
MERCI d'AVANCE
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
chuka
Messages postés
965
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
378
26 juin 2009 à 23:09
26 juin 2009 à 23:09
Salut,
Y'a pas de probleme pour t'aider mais tu les récupères dans quelle table les données?
Perso, j'ai pas trouvé de vue ou table où il y avait un historique des sessions....( j'ai du créer des trigger et une table afin d'avoir les données voulues...)
Tiens moi au jus!!
@+
Y'a pas de probleme pour t'aider mais tu les récupères dans quelle table les données?
Perso, j'ai pas trouvé de vue ou table où il y avait un historique des sessions....( j'ai du créer des trigger et une table afin d'avoir les données voulues...)
Tiens moi au jus!!
@+
bonjour,
je fais ma requête sous oracle avec slq developper. si ça peux répondre à ta question pour ma demande.
Merci
je fais ma requête sous oracle avec slq developper. si ça peux répondre à ta question pour ma demande.
Merci
chuka
Messages postés
965
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
378
27 juin 2009 à 16:27
27 juin 2009 à 16:27
Salut,
Dans quelle table ou vue tu vas recupérer les données?
Dans quelle table ou vue tu vas recupérer les données?
chuka
Messages postés
965
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
378
27 juin 2009 à 18:36
27 juin 2009 à 18:36
Salut,
alors voilà ce que j'ai fais...j'espere ca pourra t'aider!!
Creation des triggers de connexion et deconnexion
CREATE OR REPLACE TRIGGER ONLOGGOFF
BEFORE LOGOFF
ON DATABASE
DECLARE
tmpVar VARCHAR(50);
BEGIN
INSERT INTO MYLOG_SESSION (idnex,OSNAME,DATETIME,STATUS) VALUES (mylogon.NEXTVAL,SYS_CONTEXT('USERENV','OS_USER'),SYSDATE,'F');
EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END onloggoff;
/
CREATE OR REPLACE TRIGGER ONLOON
AFTER LOGON
ON DATABASE
DECLARE
BEGIN
INSERT INTO MYLOG_SESSION (idnex,OSNAME,DATETIME,STATUS) VALUES (mylogon.NEXTVAL,SYS_CONTEXT('USERENV','OS_USER'),SYSDATE,'O');
EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END onloon;
/
Creation de la Table:
CREATE TABLE MYLOG_SESSION
(
IDNEX INTEGER,
OSNAME VARCHAR2(50 BYTE),
DATETIME DATE,
SID NUMBER,
SERIAL NUMBER,
STATUS CHAR(1 BYTE)
)
Et la procedure:
Je sais pas si cela pourra t'aider mais bon....tu trouveras sinon des pistes!!
@+
alors voilà ce que j'ai fais...j'espere ca pourra t'aider!!
Creation des triggers de connexion et deconnexion
CREATE OR REPLACE TRIGGER ONLOGGOFF
BEFORE LOGOFF
ON DATABASE
DECLARE
tmpVar VARCHAR(50);
BEGIN
INSERT INTO MYLOG_SESSION (idnex,OSNAME,DATETIME,STATUS) VALUES (mylogon.NEXTVAL,SYS_CONTEXT('USERENV','OS_USER'),SYSDATE,'F');
EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END onloggoff;
/
CREATE OR REPLACE TRIGGER ONLOON
AFTER LOGON
ON DATABASE
DECLARE
BEGIN
INSERT INTO MYLOG_SESSION (idnex,OSNAME,DATETIME,STATUS) VALUES (mylogon.NEXTVAL,SYS_CONTEXT('USERENV','OS_USER'),SYSDATE,'O');
EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END onloon;
/
Creation de la Table:
CREATE TABLE MYLOG_SESSION
(
IDNEX INTEGER,
OSNAME VARCHAR2(50 BYTE),
DATETIME DATE,
SID NUMBER,
SERIAL NUMBER,
STATUS CHAR(1 BYTE)
)
Et la procedure:
DECLARE CURSOR c1 IS SELECT DISTINCT OSNAME FROM MYLOG_SESSION;--recupere tous les users enregistrés CURSOR c2 (OSN VARCHAR) IS SELECT * FROM MYLOG_SESSION WHERE OSNAME=OSN ORDER BY datetime ASC;--recuperations des données par utilisateurs cur2 c2%ROWTYPE; cur1 c1%ROWTYPE; cur3 c2%ROWTYPE; tmp CHAR; i INTEGER; BEGIN OPEN c1; i:=0;--compteur pour afficher les resultats FETCH c1 INTO cur1; WHILE c1%FOUND LOOP --boucle pour balayer tous les utilisateurs OPEN c2(cur1.OSNAME); --selection des données utilisateurs FETCH c2 INTO cur2; WHILE c2%FOUND LOOP --boucle pour verifier si 2 connexions à des endroits differents (si 2 'O' consecutif, il a ouvert 2 session à deux endroits differents tmp:=cur2.STATUS; WHILE tmp='O' AND c2%FOUND LOOP --comptage->si i>1 alors 2 connexions i:=i+1; cur3:=cur2; FETCH c2 INTO cur2; tmp:=cur2.STATUS; END LOOP; IF (i>1) THEN --si le compteur est >1 alors on affiche la personne et la derniere heure de la connexion ouverte DBMS_OUTPUT.PUT_LINE(cur3.OSNAME||' '||TO_CHAR(cur3.DATETIME,'DD/MM/YYYY HH24:MI:ss')||' '||cur3.STATUS); END IF; i:=0; --remise à zero du compteur FETCH c2 INTO cur2; END LOOP; CLOSE c2; FETCH c1 INTO cur1; END LOOP; CLOSE c1; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN -- Consider logging the error and then re-raise RAISE; END;
Je sais pas si cela pourra t'aider mais bon....tu trouveras sinon des pistes!!
@+
chuka
Messages postés
965
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
378
28 juin 2009 à 20:03
28 juin 2009 à 20:03
Salut,
Ok, je croyais que tu voulais les utilisateurs connectés à la DB sur 2 postes différent en meme temps...je suis partie en sucette!!lool
Je regarde, je te tiens au jus!!
@+
Ok, je croyais que tu voulais les utilisateurs connectés à la DB sur 2 postes différent en meme temps...je suis partie en sucette!!lool
Je regarde, je te tiens au jus!!
@+
chuka
Messages postés
965
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
378
28 juin 2009 à 23:36
28 juin 2009 à 23:36
Salut,
manque le group by dans cette expression....
CURSOR c1 IS SELECT prof,horaire,jour,COUNT(prof) FROM EdT
group by prof,horaire,jour
HAVING COUNT(prof)>1
@+
manque le group by dans cette expression....
CURSOR c1 IS SELECT prof,horaire,jour,COUNT(prof) FROM EdT
group by prof,horaire,jour
HAVING COUNT(prof)>1
@+