Rechercher : dans
Par :

{Oracle} script procédure

Dernière réponse le 28 jun 2009 à 23:36:41 oliv, le 25 jun 2009 à 23:03:20 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 3.0.11

Meilleures réponses pour « {Oracle} script procédure » dans :
Connexion à une base Oracle en php Voir1. Périmètre Cet article est un exemple de connexion à une base Oracle par le biais d'un script php. Cet article ne traite pas la configuration de votre serveur Oracle, et de votre client Oracle. Nous partons du principe que vous pouvez accéder à...
Oracle - Statistiques générales VoirPour générer des statistiques générales relatives à votre base de données, il suffit de lancer le script : $ORACLE_HOME/rdbms/admin/utlbstat.sql Des informations utiles sont alors affichées. Activer l’audit sur un objet Pour activer l’audit...
Télécharger Recovery for Oracle VoirOracle est une pointure dans la gestion et l'édition de base de données. D'où la nécessité de posséder les moyens nécessaires pour une restauration de données en cas de perte ou de suppression. Recovery for Oracle est un outil de restauration de...
PL/SQL - Introduction au langage PL/SQL VoirIntroduction au langage PL/SQL Le langage PL/SQL est un langage L4G (entendez par ce terme un langage de quatrième génération), fournissant une interface procédurale au SGBD Oracle. Le langage PL/SQL intègre parfaitement le langage SQL en lui...
VBScript - Les fonctions et les procédures VoirLa notion de procédure On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel dans le corps du programme principal. Cette notion de sous-programme est généralement appelée fonction (ou procédure)...
Oracle - Les séquences VoirCet article s'appuie sur la version 8.1.6 d'Oracle. Une séquence est un objet de base de données Oracle, au même titre qu'une table, une vue, etc... Autrement dit, il appartient à un utilisateur, on peut le manipuler, le modifier, à condition...

1

chuka, le 25 jun 2009 à 23:37:57

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 un malentendu, ca peut marcher!!

Répondre à chuka

2

oliv, le 26 jun 2009 à 14:23:56

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

Répondre à oliv

3

chuka, le 26 jun 2009 à 23:09:34

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!!
@+ Sur un malentendu, ca peut marcher!!

Répondre à chuka

4

oliv, le 27 jun 2009 à 15:37:43

Bonjour,


je fais ma requête sous oracle avec slq developper. si ça peux répondre à ta question pour ma demande.

Merci

Répondre à oliv

5

chuka, le 27 jun 2009 à 16:27:38

Salut,
Dans quelle table ou vue tu vas recupérer les données?
Sur un malentendu, ca peut marcher!!

Répondre à chuka

6

oliv, le 27 jun 2009 à 16:53:52

DANS UNE TABLE PROFSALLE JE VEUX LA NOMMER

Répondre à oliv

7

chuka, le 27 jun 2009 à 18:36:08

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:

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!!
@+ Sur un malentendu, ca peut marcher!!

Répondre à chuka

8

oliv, le 28 jun 2009 à 19:56:48
  • +1

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.

Répondre à oliv

9

chuka, le 28 jun 2009 à 20:03:16

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!!
@+ Sur un malentendu, ca peut marcher!!

Répondre à chuka

10

chuka, le 28 jun 2009 à 20:32:21
  • +1

Salut,

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
@+ Sur un malentendu, ca peut marcher!!

Répondre à chuka

11

oliv, le 28 jun 2009 à 21:28:26

Merci beaucoup pour ta réactivité et tes réponses jevais regarder ça.

Répondre à oliv

12

 chuka, le 28 jun 2009 à 23:36:41

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
@+ Sur un malentendu, ca peut marcher!!

Répondre à chuka
Collection CommentÇaMarche.net