IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

PHP + Oracle + PL/ SQL


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut PHP + Oracle + PL/ SQL
    Bonjour,

    je tente d'exécuter une procédure pl/SQL sur une base Oracle à partir d'un script PHP ... helyos si tu m'entends

    Dans mon script php je déclare une procédure avec un curseur et tente de l'éxécuter par la suite ...

    Je déclare la proc:

    $query ="CREATE OR REPLACE PROCEDURE machin IS CURSOR
    ... etc etc
    END LOOP; END; /";
    $stmt = OCIParse($cnx,$query);
    OCIExecute($stmt);
    OCIFreeStatement($stmt);

    en retour php me lance un joli warning pour me dire que tout va bien ça fais pas très bo :

    Warning: ociexecute(): OCIStmtExecute: OCI_SUCCESS_WITH_INFO: ORA-00000: Exécution normale, réussie in c:\program files\easyphp1-7\www\archivageplsql.php on line 23

    ensuite je tente d'executer ma procédure de la façon suivante :

    $stmt = OCIParse($cnx,$query);
    OCIExecute($stmt);
    OCIFreeStatement($stmt);

    mais je dois surement mal m'y prendre et php me retroune ceci :

    Warning: ociexecute(): OCIStmtExecute: ORA-00900: Instruction SQL non valide in c:\program files\easyphp1-7\www\archivageplsql.php on line 28

    quelqu'un en c plus que moi sur le sujet ?! helyos j'en suis certain

    merci @++

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Ton $query crée la procédure mais ne l'éxécute pas... soit tu remplaces CREATE OR REPLACE PROCEDURE machin IS CURSOR par BEGIN (tout simplement ) soit tu crées ta procédure que tu exécutes en PHP

    J'y connais rien en PHP donc je dis peut-être n'importe quoi mais je pense que la solution va dans ce sens

    En gros, tu testes ton $query dans SQL*Plus pour t'assurer que ça marche et seulement là tu pourras t'en servir dans ton code avec un beau copier/coller

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    il te manquerait pas un morceau dans le code que tu donnes ici? (genre la valeur de $query dans la partie d'execution de la procédure.??

    Et teste la proposition d'orafrance qui me parait aussi judicieuse afin de vérifier que ta procédure fonctionne sans etre en PHP

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    oups il est vrai :
    mon script php était celui-ci pardon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query ="CREATE OR REPLACE PROCEDURE copychamp IS CURSOR copychamp_cursor IS SELECT * FROM EDEN.TRKSCRST@MYLINK; BEGIN FOR  i IN copychamp_cursor LOOP IF i.z2 IS NOT NULL THEN UPDATE copytrkscrst SET z2 = i.z2 WHERE copytrkscrst.id = i.id; END IF; END LOOP; END; /";

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $stmt = OCIParse($cnx,$query);
    OCIExecute($stmt);                        --> ici premier warning 
    OCIFreeStatement($stmt);
     
     
    $query = "execute copychamp";
     
    $stmt = OCIParse($cnx,$query);
    OCIExecute($stmt);                         --> second warning 
    OCIFreeStatement($stmt);
    [Balises Code ajoutées par Helyos]

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Merci d'utiliser les balises code

    essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query ="DECLARE CURSOR copychamp_cursor  IS SELECT * FROM EDEN.TRKSCRST@MYLINK; BEGIN FOR i IN copychamp_cursor LOOP IF i.z2 IS NOT NULL THEN UPDATE copytrkscrst SET z2 = i.z2 WHERE copytrkscrst.id = i.id; END IF; END LOOP; END; /";
    EDIT :

    j'ai corrigé ma proposition

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    viens d'essayer ça ça passe sous SQL*Plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DECLARE 
        CURSOR copychamp_cursor IS 
            SELECT * FROM EDEN.TRKSCRST@MYLINK; 
     
    BEGIN 
        FOR  i IN copychamp_cursor LOOP 
            IF i.z2 IS NOT NULL THEN 
                UPDATE copytrkscrst SET z2 = i.z2 
                WHERE copytrkscrst.id = i.id; 
            END IF; 
        END LOOP; 
    END;
    /
    [Balises code ajoutées par Helyos (ESSAIE D'Y PENSER)]

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Pourquoi ne colles tu pas exactement ce code alors ?

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "DECLARE CURSOR copychamp_cursor IS SELECT * FROM EDEN.TRKSCRST@MYLINK; BEGIN FOR  i IN copychamp_cursor LOOP IF i.z2 IS NOT NULL THEN UPDATE copytrkscrst SET z2 = i.z2 WHERE copytrkscrst.id = i.id; END IF; END LOOP; END/";
    ma méthode ne marche po ... je vais essayer la tienne ...

    mais visiblement y a un problème avec php au nivo du /

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: ociexecute(): OCIStmtExecute: ORA-06550: Ligne 1, colonne 220 : PLS-00103: Symbole "/" rencontré à la place d'un des symboles suivants : ; <an identifier> <a double-quoted delimited-identifier> Symbole "; inséré avant "/" pour continuer. in c:\program files\easyphp1-7\www\archivageplsql.php on line 25
    [Balises code ajoutées par Helyos (ESSAIE D'Y PENSER)]

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    remplace le / final par un ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "DECLARE CURSOR copychamp_cursor IS SELECT * FROM EDEN.TRKSCRST@MYLINK; BEGIN FOR  i IN copychamp_cursor LOOP IF i.z2 IS NOT NULL THEN UPDATE copytrkscrst SET z2 = i.z2 WHERE copytrkscrst.id = i.id; END IF; END LOOP; END;";

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query ="DECLARE CURSOR copychamp_cursor  IS SELECT * FROM EDEN.TRKSCRST@MYLINK; BEGIN FOR i IN copychamp_cursor LOOP IF i.z2 IS NOT NULL THEN UPDATE copytrkscrst SET z2 = i.z2 WHERE copytrkscrst.id = i.id; END IF; END LOOP; END;";
    c oki

    g fini par trouver la bonne combinaison entre ; /; \/ / tout court etc etc ...

    merci bcp
    @++

  11. #11
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    et on n'a toujours pas droit aux balises code

    Va lire ça par pitié : http://club.developpez.com/regles/

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    lol

    j'espère que tu crois pas que je me fou de toi ... car c pas le cas je fais pas exprès ... désolé

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    promis je penserez à la balise CODE désormais ... je m'étais pas mis au courant :-(

    merci @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Oracle] accents oracle requête sql/php
    Par falco- dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/10/2008, 13h40
  2. [Oracle] Requête SQL PHP Oracle
    Par julien0709 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 16/06/2008, 13h51
  3. Réponses: 2
    Dernier message: 01/10/2007, 08h38
  4. [Php Oracle et PL/SQL]
    Par Torando59 dans le forum Oracle
    Réponses: 3
    Dernier message: 18/02/2006, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo