Bonjour,
je suis un débutant en Oracle.

J'ai installé Oracle 10 sur ma machine (Linux Mandrake 10.1) en suivant un tuto du web.

Aucun problème, j'ai crée un utilisateur Oracle qui gère le SGBD

Je me connexte à ma base depuis un session Oracle comme celà :
- je lance la base de donnée (depuis sql plus : startup)
- toujours depuis ma session sous l'utilisateur Oracle je lance un terminal puis passe à l'utilisateur christophe (su chirstophe).
- sous 'christophe' sqlplus christophe/MOTDEPASSE

Tout marche OK (création, lecture, suppression de tables.)

Sauf quand je veux utiliser un trigger !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- Compile la classe TP.java
! javac triggers_relationnel.java
 
-- Charge la classe dans le schéma de base de données
! loadjava -u christophe/MOTDEPASSE ./triggers_relationnel.class -resolve
 
-- Crée la procédure SQL/Oracle associée à la méthode NiveauPlongeur
create or replace procedure VerifierNiveau (idPlongeurIns varchar2 ,idPlongeeIns varchar2)
as language java 
name 'triggers_relationnel.VerifierNiveau(java.lang.String , java.lang.String)';
/
 
--Associe le trigger à un ajout/modification dans Inscription
create or replace trigger InsModTupleInscr
after insert or update of idPlongeurIns , idPlongeeIns on Inscriptions
for each row
call VerifierNiveau(:new.idPlongeurIns, :new.idPlongeeIns)
/

qui utilise un fichier java qui contient la méthode :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void VerifierNiveau(java.lang.String idPlongeur, java.lang.String idPlongee)
    throws SQLException, ClassNotFoundException
  { 
    // Chargement du pilote Oracle  
    Class.forName("oracle.jdbc.driver.OracleDriver");
 
    // Connexion externe à une BD Oracle, identification
    Connection conn = DriverManager.getConnection
      ("jdbc:default:connection:");
 
    // Déclaration d'une requête SQL
    Statement req = conn.createStatement ();
 
		// Déclaration d'une requête SQL
    Statement req2 = conn.createStatement ();
 
    // Niveau requis pour la plongee
    ResultSet niveauPlongee = req.executeQuery
      ("Select niveauRequis From Plongees Where idPlongee = '"+idPlongee +"'");
quand j'execute le code sql j'obtient l'erreur :

errors : class triggers_relationnel
ORA-29521: impossible de trouver le nom référencé java/lang/StringBuilder
The following operations failed
class triggers_relationnel: resolution
exiting : Failures occurred during processing

Mais la procédure et le déclencheur sont quand même crées...

Quand j'insère des tuples dans la taple concernée par le trigger je recois un message d'erreurs.

Le fichier java compile parfaitement mais impossible de le charger !! je pense qu'il s'agit d'un problème de variable d'envirronement...

Je précise que le meme code marche parfaitement à la Fac, donc ça vient forcément de mon installation et pas du code...

Voilà si vous avez des idées
(j'espère avoir été clair)

Merci,
Christophe

Message édité par Orafrance, merci d'utiliser les outils du forum qui facilitent la lecture :twisted: