Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & Oracle
PHP & Oracle Forum d'entraide sur Oracle avec PHP. Avant de poster -> FAQ Oracle et Cours 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 22/02/2005, 10h53   #1
Membre éclairé
 
Avatar de Cerberes
 
Inscription : janvier 2004
Messages : 328
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 328
Points : 309
Points : 309
Envoyer un message via MSN à Cerberes
Par défaut Exécuter une procédure PL/SQL en PHP?

Bonjour!

Tout d'abord, désolé si cette question à déja été posée... J'ai lancé une recherche, mais je n'ai rien trouvé...

Mon problème est le suivant. Dans le cadre d'un travail de diplôme, un collègue et moi-même devont créer un base Oracle et l'interface doit être en PHP. Je suis le DBA. Mon collègue s'occupe de la partie PHP.

Problème: Pour lui simplifier la vie, j'ai créer des procédures (en PL/SQL sous Oracle). Ces procédures fonctionnes parfaitement, on les lances en utilisant le SQL réservé EXECUTE d'Oracle. Le problème, c'est qu'actuellement, on ne peut pas lancer d'ordres SQL tels qu'EXECUTE. Mon collègue se connecte en ODBC avec les commandes suivantes:
  • ODBC_DO
  • ODBC_EXEC
  • ODBC_PREPARE

Donc, moment crucial: La question. Comment faire via une couche ODBC pour éxecuter des procédures internes à la base voulue?

Merci d'avance de vos réponses, parce qu'on sèche...

PS: La base est en Oracle 10g, pas d'interface WEB (donc pas de serveur apache).
__________________
Merci d'éviter les UP et autres messages inutiles!
Modérateur Informatique Générale (même si je me mets au Delphi)
N'oubliez pas les règles!
Mon adresse e-mail
Cerberes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2005, 11h59   #2
Membre habitué
 
Avatar de .:morgoth:.
 
Inscription : février 2005
Messages : 124
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 124
Points : 116
Points : 116
Salut,

bon je te donne une astuce qui peut eventuellement marcher (a prendre vraiment au conditionnel).
Dans le SGBD que j'utilise, il est possible d'exécuter une procédure par 'SELECT * from NOM_PROCEDURE (param1,param2,...)" meme si celle ci ne renvoie pas de resultat.

Je n'ai aucune idée de la possibilité de cette solution sous Oracle mais sait on jamais.
.:morgoth:. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2005, 12h07   #3
Membre Expert
 
Avatar de Bidouille
 
Inscription : mars 2003
Messages : 1 158
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 1 158
Points : 1 054
Points : 1 054
As-tu cherché dans la section Oracle ?

http://www.developpez.net/forums/viewtopic.php?t=254680&highlight=php
__________________
Rédacteur PHP / Delphi ADO / Novell / OpenOffice.org

Inutile de m'envoyer vos questions par MP, je ne réponds que par le forum.
Bidouille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2005, 13h08   #4
Membre éclairé
 
Avatar de Cerberes
 
Inscription : janvier 2004
Messages : 328
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 328
Points : 309
Points : 309
Envoyer un message via MSN à Cerberes
Citation:
Envoyé par .:morgoth:.
Dans le SGBD que j'utilise, il est possible d'exécuter une procédure par 'SELECT * from NOM_PROCEDURE (param1,param2,...)" meme si celle ci ne renvoie pas de resultat.
Salut! Merci de ta réponse, mais hélas, ça ne fonctionne pas sous Oracle... Comme la procédure que je lance ne retourne pas une valeur (ce n'est pas une fonction), mais lance un ordre de LDD (Langage de Définition des Données, modifie le schéma, en gros), impossible de lancer cette procédure par un select...

Citation:
Envoyé par BiD0uille
As-tu cherché dans la section Oracle ?

http://www.developpez.net/forums/vie...&highlight=php
j'avoue qu'en désespoir de cause, j'ai oublié de chercher par là...

Hélas, le lien ne m'est pas utile... Si je ne m'abuse (je suis nul en PHP), OCI est une procédure qui fais appel à la base via un server WEB (apache), non? Et nous n'utilisons qu'une couche ODBC...
__________________
Merci d'éviter les UP et autres messages inutiles!
Modérateur Informatique Générale (même si je me mets au Delphi)
N'oubliez pas les règles!
Mon adresse e-mail
Cerberes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2005, 16h44   #5
Membre Expert
 
Avatar de Bidouille
 
Inscription : mars 2003
Messages : 1 158
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 1 158
Points : 1 054
Points : 1 054
Citation:
Envoyé par Cerberes
Si je ne m'abuse (je suis nul en PHP), OCI est une procédure qui fais appel à la base via un server WEB (apache), non? Et nous n'utilisons qu'une couche ODBC...
Non, tu t'abuses
Les fonctions oci passent pas le pilote Oracle et les informations du tnsname.

Tu n'as qu'à faire des tests.
__________________
Rédacteur PHP / Delphi ADO / Novell / OpenOffice.org

Inutile de m'envoyer vos questions par MP, je ne réponds que par le forum.
Bidouille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2005, 18h26   #6
Expert Confirmé Sénior
 
Homme Mathias Gaunard
Ingénieur développement logiciels
Inscription : décembre 2003
Messages : 3 543
Détails du profil
Informations personnelles :
Nom : Homme Mathias Gaunard
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : décembre 2003
Messages : 3 543
Points : 4 408
Points : 4 408
Pose ta fonction dans le forum Oracle, ou même Général SGBD.
Le problème n'a pas grand chose à faire avec PHP.
loufoque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2005, 16h17   #7
Membre éclairé
 
Avatar de Cerberes
 
Inscription : janvier 2004
Messages : 328
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 328
Points : 309
Points : 309
Envoyer un message via MSN à Cerberes
Citation:
Envoyé par loufoque
Pose ta fonction dans le forum Oracle, ou même Général SGBD.
Le problème n'a pas grand chose à faire avec PHP.
Et bien, j'avoue être un peu perdu... Sur le forum Oracle, ils me diront que c'est une fonction PHP que je recherche, donc pas le bon forum... Bon, aujourd'hui, c'étais téhorie, la pratique reprends demain, nous allons donc creuser l'histoire d'une fonction OCI avec une couche ODBC...
__________________
Merci d'éviter les UP et autres messages inutiles!
Modérateur Informatique Générale (même si je me mets au Delphi)
N'oubliez pas les règles!
Mon adresse e-mail
Cerberes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2005, 17h32   #8
Membre Expert
 
Avatar de Bidouille
 
Inscription : mars 2003
Messages : 1 158
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 1 158
Points : 1 054
Points : 1 054
Teste par oci et reviens nous en parler.
__________________
Rédacteur PHP / Delphi ADO / Novell / OpenOffice.org

Inutile de m'envoyer vos questions par MP, je ne réponds que par le forum.
Bidouille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2005, 20h23   #9
Membre chevronné
 
Avatar de Kioob
 
Olivier Bonvalet
Inscription : septembre 2004
Messages : 550
Détails du profil
Informations personnelles :
Nom : Olivier Bonvalet
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : septembre 2004
Messages : 550
Points : 723
Points : 723
Envoyer un message via MSN à Kioob
Perso avec Oracle 8, j'éxécutais ça :
Code :
1
2
3
begin
lafonction();
end;
Kioob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2005, 09h26   #10
Membre éclairé
 
Avatar de Cerberes
 
Inscription : janvier 2004
Messages : 328
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 328
Points : 309
Points : 309
Envoyer un message via MSN à Cerberes
Citation:
Envoyé par BiD0uille
Teste par oci et reviens nous en parler.
A marche. J'essaie de persuader le collègue, on verra ce que ça donnera.

Mais dans le cas des OCI, il devra refaire le script de connexion, juste? Ou les fonctions ODBC* fonctionnent avec les fonction OCI*? Je recherche un peu des infos sur internet, mais comme je n'y connais rien en PHP, c'est encore un peu tordu pour moi

Citation:
Envoyé par Kioob
Perso avec Oracle 8, j'éxécutais ça :
Code :
1
2
3
begin
lafonction();
end;
Justement, EXECUTE remplace BEGIN et END sous Oracle... Mais ton code, tu le lançais avec quelle fonction de PHP? ORA_DO? ORA_EXEC?

J'essaierai déja avec les OCI... Merci beaucoup, en tout cas! je redonne des nouvelles...
__________________
Merci d'éviter les UP et autres messages inutiles!
Modérateur Informatique Générale (même si je me mets au Delphi)
N'oubliez pas les règles!
Mon adresse e-mail
Cerberes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2005, 13h32   #11
Expert Confirmé Sénior
 
Homme Mathias Gaunard
Ingénieur développement logiciels
Inscription : décembre 2003
Messages : 3 543
Détails du profil
Informations personnelles :
Nom : Homme Mathias Gaunard
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : décembre 2003
Messages : 3 543
Points : 4 408
Points : 4 408
Citation:
Mais dans le cas des OCI, il devra refaire le script de connexion, juste? Ou les fonctions ODBC* fonctionnent avec les fonction OCI*?
Oui il devra "refaire" le script de connexion.
Si c'est bien fait, ça prend moins de 5 minutes (quoique si il faut faire la bufferisation pour OCI ça peut prendre un peu plus longtemps)

Citation:
Justement, EXECUTE remplace BEGIN et END sous Oracle... Mais ton code, tu le lançais avec quelle fonction de PHP? ORA_DO? ORA_EXEC?
odbc_do et odbc_exec sont des synonymes.
loufoque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2005, 14h11   #12
Membre éclairé
 
Avatar de Cerberes
 
Inscription : janvier 2004
Messages : 328
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 328
Points : 309
Points : 309
Envoyer un message via MSN à Cerberes
MERCI A TOUS!

Nous avons enfin réussis. Nous utilisons BEGIN et END dans une fonction ODBC_DO (je crois, car mon collègue est à nouveau pas là, je devrai certainement apprendre le PHP d'ici à la fin de l'année, si il continue ), et ça marche!!! C'est kewl, enfin, on pourra continuer un peu dans ce travail...

En tout cas, je suis étonné qu'EXECUTE ne fonctionne pas, puisque c'est exactement la même chose que begin/end... Étrange, mais je me suis tellement arraché de cheveux pour l'instant, que je vais me poser la question un peu plus tard, là...

En tout cas, merci à tous...

[EDIT]
Et non, ce post n'avais pas disparu, il redescends des abîmes!
Mais pour une bonne nouvelle, donc tout va bien...
[/EDIT]
__________________
Merci d'éviter les UP et autres messages inutiles!
Modérateur Informatique Générale (même si je me mets au Delphi)
N'oubliez pas les règles!
Mon adresse e-mail
Cerberes 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 01h35.


 
 
 
 
Partenaires

Hébergement Web