Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/03/2006, 19h12   #1
Futur Membre du Club
 
Inscription : février 2003
Messages : 51
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 51
Points : 18
Points : 18
Envoyer un message via MSN à cdryk
Par défaut Oracle - Trigger et Code Java

Bonjour à tous !

Je post ici afin d'avoir une idée de comment faire interagir un trigger avec une methode en java.

J'ai mis en place un ptit trigger tout bete genre :
CREATE OR REPLACE TRIGGER TRIGGER_TEST
BEFORE INSERT ON TABLE_TEST
...

Et d'un autre coté j'ai fait un ptit programme en java avec une méthode :
PUBLIC STATIC INTEGER METHOD_TEST(String A) { ... }

Et ce que je souhaiterai c'est que le trigger appelle la méthode qui est chargé dans oracle grâce au java loader (commande : LOADJAVA -user etc...)

Je n'ai aucun problème au niveau du code, tout fonctionne séparément le trigger comme la fonction.
Sauf que je souhaite que le trigger aprés l'avoir appelé récupére l'entier et si la valeur est 1 alors on autorise l'insertion, sinon on la bloque.

Merci d'avance !

PS : Merci de ne pas me proposer d'autres solutions il faut impérativement passer par de la communication entre TRIGGER et JAVA...
J'avais pensé que le trigger appelle une fonction stockée qui se charge d'appeler JAVA et que le trigger récupère le résultat de la fonction mais ca merde... Donc je cherche à savoir en priorité s'il est possible de faire appel au JAVA directement dans le trigger ! Merci encore !!!
cdryk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2006, 11h38   #2
Futur Membre du Club
 
Inscription : février 2003
Messages : 51
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 51
Points : 18
Points : 18
Envoyer un message via MSN à cdryk
Alors ?

Personne ne sait comment interroger un objet java à partir d'un trigger ??

Siouplé

Merci
cdryk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2006, 12h08   #3
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Sans passer par une procédure, non je ne sais pas faire.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2006, 15h17   #4
Futur Membre du Club
 
Inscription : février 2003
Messages : 51
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 51
Points : 18
Points : 18
Envoyer un message via MSN à cdryk
Ok et en passant par la procédure ?
Parce que j'ai bien essayé mais ca me colle des erreurs (type de données incohérents : invalid java signature) c'est pourquoi je souhaitais d'abord savoir si c'était pas possible de passer directement par le trigger...

Maintenant si tu peux m'aider à résoudre le problème sur la proc...

Voila le code actuel :

TRIGGER :
CREATE OR REPLACE TRIGGER test
BEFORE UPDATE ON table
FOR EACH ROW
DECLARE
leRes NUMBER;
BEGIN
leRes := USER.MONPACKAGE.maFonction(:old.A,:new.val);
IF (leRes = 0) THEN RAISE_APPLICATION_ERROR(-20001,'No modif');
END IF;
END;

PROCEDURE :
CREATE OR REPLACE PACKAGE BODY MONPACKAGE IS
FUNCTION maFonction (var1 IN VARCHAR2, var2 IN VARCHAR2) RETURN NUMBER as
LANGUAGE JAVA NAME 'maClasseJava.maMethodeJava(String, String) return java.lang.Integer';
END MONPACKAGE;

PROGRAMME :
maClasse {
public static Integer maMethodeJava(String a, String b) {
Integer i;
...
return i;
}
}

J'ai bien compris qu'il y a un probleme au niveau du type mais je n'arrive pas à voir où...
Dans le trigger : leRes est un NUMBER
Dans la procédure stockée : un NUMBER également
Dans le programme java : un objet INTEGER
Donc je pense qu'il y a un prob entre le java et la procédure stockée... Je ne sais plus si j'ai essayé de retourner un int mais il me semble que java doit renvoyer un objet à oracle donc un Integer et pas un int... Enfin bon si tu peux m'éclairer un peu car c'est la première fois que je fais ca et c'est super intéressant car ca peut permettre de faire encore plein de nouveaux trucs avec ce SGBD

PS : Je suis complètement d'accord avec ta signature "Un problème sans solution est un problème mal posé"... Moi j'ai plus pour habitude de dire qu'il n'y a pas de problème mais uniquement des solutions et que tout est réalisable... Ca se rejoint
cdryk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h17.


 
 
 
 
Partenaires

Hébergement Web