Procedure select

abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 - 23 juin 2007 à 18:23
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 - 6 févr. 2009 à 14:18
Bonjour,

Je suis en train de faire un projet oracle pour mes études. Ce projet mélange du php avec une base oracle. Lors d'un bilan en cours de projet notre prof nous suggérer d'utiliser des procédures dans le code php, au lieu de faire directement de requête SQL. Le but étant de ne pas avoir à toucher à php lors de modification de la base.

Le problème qui se pose maintenant est comment faire cela. Car en effet dans une procedure un select ne marche pas:

  PROCEDURE type IS
  BEGIN
        SELECT * FROM TYPE;
       NULL;
  END type;

Je me suis dit que peut être je pourrai faire cette reqête via un curseur et sortir les données à l'aide d'une variable sous forme de tableau. Mais là, cela dépasse largement mes compétances. J'ai cherché un peu sur le net mais c'est pas évident à trouver... Si quelqu'un peut m'aider???

Cordialement

Have Fun ...

1 réponse

cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 2
6 févr. 2009 à 14:18
Bonjour,

Dans du code PL/SQL tu es obligé de déclarer une variable dans laquelle tu vas stocker le résultat...
De plus, si tu veux pouvoir utiliser ce résultat dans ton code PHP, il faut retourner quelque chose, soit grâce à un paramètre OUT, soit en créant une fonction plutôt qu'une procédure.
Exemple:

create or replace procedure p_compte(pon_compte out number) is
   ln_compte number(10) default 0;
begin
   select count(1)
      into ln_compte
     from ma_table;
   pon_compte := ln_compte;
end compte;
/

J'aurais pu bien entendu faire:
select count(1)
   into pon_compte
 from ma_table;

J'ai procédé ainsi pour montrer comment déclarer une variable dans une procédure pl/sql
Une fonction:

create or replace function compte return number is
   ln_compte number(10) default 0;
begin
   select count(1)
      into ln_compte
     from ma_table;
   return ln_compte;
end f_compte;
/

Il y a encore énormément de choses à dire, mais c'est un début.  Il y a pas mal de doc sur internet.

Bonne chance !
0