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

PHP & Base de données Discussion :

Exécuter un script sql (pl/sql) dans un fichier PHP


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Exécuter un script sql (pl/sql) dans un fichier PHP
    Bonjour,

    Je suis débutante, et je rencontre un problème. J'espère que j'ai placé mon sujet dans le bon endroit.

    Je m'explique :
    D'un côté, j'ai un script sql qui ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SET SERVEROUTPUT ON
    SET TERM         OFF
    SET ECHO         OFF
    SET TIMING       OFF
    SET VERIFY       OFF
    SET FEEDBACK     OFF
     
    ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY';
    DEF l_Reference = &1
     
    SPOOL c:\temp\test.txt
    EXECUTE A.B('&l_Reference')
    SPOOL OFF
    Pour information, ce script a pour but de récupérer des données grâce à la référence et de les mettre dans un fichier "txt", je ne sais pas si je suis claire.
    J'aimerai exécuter ce script dans un fichier PHP.
    J'ai vu quelques solutions sur les forums mais j'ai du mal à comprendre et de toute manière sa ne fonctionne pas avec moi.
    Voici mon fichier php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    // solution 1
    $query = "SET SERVEROUTPUT ON".
    "SET TERM         OFF".
    "SET ECHO         OFF".
    "SET TIMING       OFF".
    "SET VERIFY       OFF".
    "SET FEEDBACK     OFF".
    "ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY';".
    "SPOOL c:\temp\test.txt".
    "EXECUTE A.B('".$reference."')".
    "SPOOL OFF";
    //$query = file_get_contents('../test.sql'); // Solution 2
    //$query = mysql_escape_string($query); // Solution 2
    $statement = oci_parse($connection, $query);
    oci_execute($statement);
    Ma connexion à ma base fonctionne, mais j'obtiens l'erreur suivante quand j'essaye mon fichier php : oci_execute() [function.oci-execute]: ORA-00922: option erronée ou absente.

    Est ce que quelqu'un pourrait m'expliquer mon erreur ou me proposer d'autres solutions pour exécuter mon script dans mon fichier php.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Ton problème vient du fait que la majorité des lignes de ton script ne sont pas des commandes SQL ou PL/SQL mais des directives de SQL*plus.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Vous avez plutôt un script sqlplus (un utilitaire Oracle qui permet d'exécuter des requêtes SQL) qu'un script SQL. Par conséquences les premières instructions commençant par SET sont des instructions de "paramétrage" de cet outil. L'instruction alter session permet de modifier l'affichage des données de type dates pour la session en cour (instruction SQL spécifique Oracle de contrôle des paramètres d'une session), l'instruction Def permet de définir une variable de substitution (concept sqlplus également) et récupérer une valeur transmise en ligne de commande par l'instruction qui lance sqlplus; SPOOL est une commande sqlplus qui permet d'envoyer les l'affichage dans un fichier et Execute est un raccourci sqlplus pour un l'exécution d'un block PL/SQL de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BEGIN
      A.B(...);
    END;
    Via PHP vous pouvez exécuter des requête SQL ou des procédures PL/SQL mais pas des commandes sqlplus.
    La première question est que est-ce que vous voulez accomplir en fait via PHP: générer le fichier comme le script, obtenir le données du fichier , etc. ?

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos réponses qui m'ont de comprendre le script que l'on m'a fourni.
    Mon but est de récupérer des données pour les mettre dans un fichier via PHP.
    Donc je pense qu'il faut que je transforme la commande EXECUTE en SELECT ? Est ce que je suis sur le bon chemin ?
    Merci d'avance.

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Je pense avoir trouver ma solution personnelle, je suis remonté aux sources, j'ai été chercher le fichier qui permet de créer la procédure B dans mon exemple. Je vais l'étudier.

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Pour le moment j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    $reference = "14274000000000003";
     
    $connexion = oci_connect($user, $password, $host);
    if (!$connexion) {
        echo "Connexion pas ok";
        die();
    } else {
        echo "Connexion OK...";
    }
     
     
    $statement = oci_parse($connection, "begin A.B(:reference); end;");
    oci_bind_by_name($statement,":reference",$reference,32);
     
    $valeur = oci_execute($statement);
    if(!$valeur){
        echo "execution pas ok";
    }else{
         echo "excution ok";
    }
     
    while($row = oci_fetch_array($statement, OCI_ASSOC)) {
        var_dump($row);
    }
     
    oci_free_statement($statement);
     
    oci_close($connection);

    Voici le résultat que j'ai obtenu :
    Connexion OK...
    excution ok
    Warning: oci_fetch_array() [function.oci-fetch-array]: ORA-24374: définition non exécutée après extraction ou exécution et extraction in ...

    Je ne comprend pas mon erreur et j'avoue que ma connaissance en oracle est très faible.
    Je me suis inspiré des tutos sur internet pour mon code mais je ne mentirai pas j'ai du mal à comprendre mon code surtout les paramètres de oci_bind_by_name et ne parlons même pas de ma boucle while.
    Je cherche simplement a affiché le résultat en affichant les clé et les valeurs du tableau "row".

    Merci d'avance de m'expliquer mon problème et de me proposer des solutions.

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/04/2009, 19h47
  2. [Forms - PL/SQL] Se déplacer dans un fichier
    Par Yoshidu62 dans le forum Forms
    Réponses: 2
    Dernier message: 15/11/2007, 11h21
  3. Réponses: 7
    Dernier message: 20/09/2007, 11h21
  4. Scripts VBS + DOS - sortie dans un fichier de logs
    Par kayanwan dans le forum VBScript
    Réponses: 8
    Dernier message: 14/09/2007, 15h34
  5. SQL*LOADER - Requete dans le fichier de controle
    Par VinceTlse dans le forum Oracle
    Réponses: 6
    Dernier message: 19/01/2006, 15h11

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