Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 28/01/2008, 10h04   #1
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 16
Points : 16
Par défaut PLS-00428: une clause INTO est attendue dans cette instruction SELECT

BONJOUR A TOUS

voila j'ai un petit pb concernant l'utilisation du package UTL_HTTP .
J'avais besoin de pointer sur une page PHP à partir de ma base ORACLE via un trigger.
Pour vous expliquer un peu le topo je fait un gestionnaire de cache qui lui est en place, pour info c'est un package PEAR ( cache-lite ). L'idée était de ne plus générer le cache du coté client ( navigateur ) mais coté serveur ( donc via ORACLE ) à partir d'une modif quelconque dans ma base je recrée ce cache comme ça les utilisateurs ont un accés trés rapide aux pages avec des infos à jour.
Voila pour l'explication global !
J'ai bien réussi à utiliser UTL_HTTP en faisant :

Code :
1
2
 
SELECT utl_http.request('http://127.0.0.1/GESTIONNAIRE_CACHE/S_CMD.php?date=01-01-08')   FROM dual;
quand je tape ça coté sql pas de pb il me renvoie le code html de ma page , mais quand je l'insere dans mon trigger :

Code :
1
2
3
4
5
6
7
8
9
 
CREATE OR REPLACE TRIGGER  "SESSION_ENTREE_T1" 
AFTER
INSERT ON "SESSION_ENTREE"
begin
SELECT utl_http.request('http://127.0.0.1/GESTIONNAIRE_CACHE/S_CMD.php?date=01-01-08') FROM dual;
 
end;
/
il m'envoie l'erreur :

Code :
1
2
 
PLS-00428: une clause INTO est attendue dans cette instruction SELECT
bon alors je veux bien lui rajouter pour lui faire plaisir bien que j'en vois pas l'utilité, mais je sait pas dans ' INTO ' quoi ?

Y-a-t'il une solution pour mettre un into quelque chose ou doit-je passer par une fonction ou une procédure peut importe pour ne plus avoir ce message !!?

merci pour votre aide
highs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 10h24   #2
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
N'importe quel select en PL/SQL doit avoir une clause into, c'est comme cela.

Mais je ne vois pas l'intérêt de faire un select from dual pour une fonction, pour quoi ne pas faire directement :
Code :
var := utl_http.request('http://127.0.0.1/GESTIONNAIRE_CACHE/S_CMD.php?date=01-01-08');
__________________
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 28/01/2008, 10h26   #3
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 483
Points : 1 483
C'est parce qu'il faut utiliser le SQL dynamique pour exécuter des commandes SQL dans un bloc PL/SQL
Essaie
Code :
1
2
3
4
5
6
7
8
CREATE OR REPLACE TRIGGER  "SESSION_ENTREE_T1" 
AFTER
INSERT ON "SESSION_ENTREE"
begin
EXECUTE IMMEDIATE 'SELECT utl_http.request(''http://127.0.0.1/GESTIONNAIRE_CACHE/S_CMD.php?date=01-01-08'') FROM dual';
 
end;
/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 10h43   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
on aura tout lu sur ce forum... le SQL dynamique ne doit être utiliser QUE si le nom d'une colonne ou table de la requête SQL est dynamique ou pour exécuter une code DDL.

Dans le cas présent, la réponse a déjà été donnée :
Code :
var := utl_http.request('http://127.0.0.1/GESTIONNAIRE_CACHE/S_CMD.php?date=01-01-08');
ou :
Code :
1
2
SELECT utl_http.request('http://127.0.0.1/GESTIONNAIRE_CACHE/S_CMD.php?date=01-01-08') 
INTO var FROM dual;
Où var est une variable déclaré dans le trigger
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 10h49   #5
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 16
Points : 16
Par défaut merci pour vos reponses

En effet plaineR y fallait bien que je colle ce resultat de la requete quelque par , donc j'ai fait ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
CREATE OR REPLACE TRIGGER  "SESSION_ENTREE_T1" 
AFTER
INSERT ON "SESSION_ENTREE" 
 
DECLARE 
cont_html VARCHAR2(4000);
 
begin 
 
SELECT utl_http.request('http://127.0.0.1/GESTIONNAIRE_CACHE/S_CMD.php?date=01-01-08') INTO cont_html FROM dual;
 
end;
et ça marche impecable !!!

j'avais pas tilté sur le fait de récupérer le resultat parce qu'en faite je n'en ai pas besoin ( le fait de consulter la page PHP crée le cache et c'été le but ).

je vais malgré tout essayer vos solutions comme ça j'apprend quelque truck en plus !!! MERCI POUR TOUT
highs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 10h55   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Code :
cont_html := utl_http.request('http://127.0.0.1/GESTIONNAIRE_CACHE/S_CMD.php?date=01-01-08');
évite un accès sur DUAL... je ne sais pas pourquoi tu insistes avec ton SELECT
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 11h29   #7
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 33
Points : 16
Points : 16
Par défaut çà y est je l'ai changé !

non non j'insiste pas c'est que comme tout le monde le sait quand on debute sur un language on est deja bien content quand ça marche ( genre ta mis une demi journée pour ecrire trois lignes de code) alors on ce contente du peu qui marche !! je met en place cette nouvelle solution de toute façon moins y'a de ligne et mieux c'est !!!!

merci encore pour tout !!
highs est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h39.


 
 
 
 
Partenaires

Hébergement Web