Friday, 3 June 2011

Oracle PL/SQL NO_DATA_FOUND et TOO_MANY_ROWS EXCEPTIONS.

ORACLE ERROR

Oracle PL/SQL NO_DATA_FOUND et TOO_MANY_ROWS EXCEPTIONS.

PL/SQL a un mécanisme de gestion des erreurs qui permet de traiter ces évènements dans le BLOC EXCEPTION.
Cette requête SELECT INTO doit renvoyer impérativement 1 seul enregistrement sinon une erreur est declenchée.
Voici deux exemples (avec et sans gestion des erreurs) ou PLSQL soulève :
/-- EXCEPTION prédéfinie NO_DATA_FOUND si aucune ligne n'est retournée (empno = 889 introuvable).
? EXCEPTION prédéfinie TOO_MANY_ROWS si plusieurs lignes sont retournées (job = 'ANALYSTE' 4 enreg. retournés).
I-  EXCEPTION prédéfinie NO_DATA_FOUND.

 

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 v_ename emp.ename%type;
3 v_job emp.job%type;
4 v_sal emp.sal%type;
5 BEGIN
6 SELECT ename, job, sal
7 INTO v_ename, v_job,v_sal
8 FROM emp
9 WHERE empno = 889;
10 dbms_output.put_line('Name = '||v_ename || ' Job = ' || v_job||'Salaire: '||v_sal);
11 END;
/

DECLARE
*

ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 6

Traitement de l'erreur :Introduire la clause EXCEPTION
 

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 v_ename emp.ename%type;
3 v_job emp.job%type;
4 v_sal emp.sal%type;
4 BEGIN
5 SELECT ename, job,sal
6 INTO v_ename, v_job,sal
7 FROM emp
8 WHERE empno = 889;
9 dbms_output.put_line('Name = '||v_ename || ' Job = ' || v_job||'Salaire: '||v_sal);
10 EXCEPTION
11 WHEN NO_DATA_FOUND THEN
12 dbms_output.put_line(SQLERRM(SQLCODE)||' SALARIE INNEXISTANT !!');
13 WHEN OTHERS THEN
14 dbms_output.put_line('Autres Erreurs');
15 END;
/

ORA-01403: no data found SALARIE INNEXISTANT !!
PL/SQL procedure successfully completed.

II-   EXCEPTION prédéfinie TOO_MANY_ROWS.
 

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 v_ename emp.ename%type;
3 v_job emp.job%type;
4 v_sal emp.sal%type;
5 BEGIN
6 SELECT ename, job, sal
7 INTO v_ename, v_job,v_sal
8 FROM emp
9 WHERE job = 'ANALYSTE';
10 dbms_output.put_line('Nom = '||v_ename || ' Job = ' || v_job||'Salaire: '||v_sal);
11 END;
/

DECLARE
*

ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 6

Traitement de l'erreur :Introduire la clause EXCEPTION
 

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 v_ename emp.ename%type;
3 v_job emp.job%type;
4 v_sal emp.job%type;
5 BEGIN
6 SELECT ename, job
7 INTO v_ename, v_job
8 FROM scott.emp
9 WHERE job = 'ANALYSTE';
10 dbms_output.put_line('Name = '||v_ename || ' Job = ' || v_job||'Salaire: '||v_sal);
11 EXCEPTION
12 WHEN TOO_MANY_ROWS THEN
13 dbms_output.put_line(SQLERRM(SQLCODE)||' Ce Job n''est pas Unique !!');
14 WHEN OTHERS THEN
15 dbms_output.put_line('Autres Erreurs');
16 END;
17 /

>ORA-01422: exact fetch returns more than requested number of rows Ce Job n'est pas Unique !!

PL/SQL procedure successfully completed.
Lorsque le traitement est transferé dans le BLOC EXCEPTION, il n'est plus possible de revenir dans le corps du bloc BEGIN (sauf utilisation de blocs imbriquées).
Quand le programme prend en compte l’erreur dans une entrée WHEN, les instructions de cette entrée sont exécutées et le programme se termine.
pour remedier au problemme de TO_MANY_ROWS: utilsez des Curseur ou bien des TYPES Tables

Sunday, 29 May 2011

Erreur Ora-01033 sous Linux

Erreur ORA-01033!:

ora-01033 :Oracle initialisation or shutdown in progress: Sous linux Debian

Pour remedier a cette erreur suivez les étapes ci-dessus

Se connecter comme administrateur: Sys

Arreter la base de donnée: sql> shutdown immediate

refaire le mountage de la base de donnée: sql> startup mount

réouvrir la base de donnée: sql> alter database open

se connecter sql> conn scott/tiger ou bien votre compte habituelle!!

Cliquez sur l'écran ci-dessous !!

Friday, 20 May 2011

Insaller Oracle sous Linux

Insallation oracle 10g Express Edition sous Linux !

Installation de Oracle Database 10g Release 2 (10.2.0.1) Express Edition for Linux x86

Cliquer içi pour Télécharger Oracle10g Express Edition
Recuperation du paquet puis install:
vous pouvez avoir un probléme de taille de memoire alors redifinit la taille de la memoire:

root@debian:/mnt/programe# dd if=/dev/zero of=/tmp/swap bs=1M count=1024

Commencer l'installation

root@debian:/mnt/programe# dpkg -i oracle-xe-universal_10.2.0.1-1.0_i386.deb

Des erreurs ont ete rencontrees pendant l'execution?: oracle-xe-universal
.
. On corrige: Insallez le package libaio1 et oracle-xe-universal

root@debian:/mnt/programe# apt-get install libaio1 && dpkg -i oracle-xe-universal_10.2.0.1-1.0_i386.deb


ou bien en deux étapes:

root@debian:/mnt/programe# apt-get install libaio1

Parametrage de libaio1 (0.3.106-3) ...
installez oracle-xe

root@debian:/mnt/programe# dpkg -i oracle-xe-universal_10.2.0.1-1.0_i386.deb

Parametrage de oracle-xe-universal (10.2.0.1-1.0) ...
Executing Post-install steps...
You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.

root@debian:/usr/lib/oracle# /etc/init.d/oracle-xe configure

Oracle Database 10g Express Edition Configuration
.
=> J'accepte les options par defaut et specifie un mot de passe pour l'utilisateur SYSTEM.
Specify the HTTP port that will be used for Oracle Application Express [8080]:
Specify a port that will be used for the database listener [1521]:
Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:n
Starting Oracle Net Listener...Done
Configuring Database...Done
Starting Oracle Database 10g Express Edition Instance...Done
Installation Completed Successfully.

To access the Database Home Page go to "http://127.0.0.1:8080/apex"

root@debian:/usr/lib/oracle#

root@debian:/etc# netstat -lnp

Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat
tcp 0 0 0.0.0.0:37 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:13 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
.
.
Sockets du domaine UNIX actives(seulement serveurs)

Proto RefCpt Indicatrs Type Etat I-Node PID/Program name Chemin
unix 2 [ ACC ] STREAM LISTENING 9925 3017/tnslsnr /var/tmp/.oracle/sEXTPROC_FOR_XE
Un petit coup d'oeil sur les fichiers installes:

root@debian:/usr/lib/oracle/xe# ll

total 16
drwxr-xr-x 4 oracle dba 4096 2008-04-11 15:47 .
drwxr-xr-x 5 oracle oinstall 4096 2008-04-11 15:49 ..

root@debian:/usr/lib/oracle/xe# ll oradata/
total 12 drwxr-xr-x 3 oracle oinstall 4096 2008-04-11 15:47 .
drwxr-xr-x 4 oracle dba 4096 2008-04-11 15:47 ..
drwxr-x--- 2 oracle oinstall 4096 2008-04-11 15:49 XE

Testez la connexion à la base de donnée en tapant dans un navigateur web:

"http://127.0.0.1:8080/apex"

Ecran d'identification

Page d'acceuil Oracle Entrprise Manager