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

Scripts/Batch Discussion :

Passage de script SQL vers base Oracle [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Par défaut Passage de script SQL vers base Oracle
    Bonjour à tous.

    Même si je commence à avoir quelques notions en Powershell, de nombreuses interrogations demeurent.

    Ma problématique est la suivante : envoyer un script sql (multiples instructions contenues dans un fichier) pour exécution dans une base Oracle.

    Je suis donc parti vers les différentes fonctionnalités existantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	# Déclaration de la connexion ORACLE
    	$oracleConnection = new-object System.Data.OracleClient.OracleConnection $connectionString;
    
    	# Ouverture de la connexion Oracle
    	$oracleConnection.Open();
    avec $connectionString la chaîne de connexion Oracle
    A ce point Ok.

    Afin de simplifier, je passe en arrière plan le chargement du script sql, pour ne m’intéresser qu'à mon point de blocage (du moins , je crois).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $SQLCommandText ="INSERT INTO test_job_tab ( nom_appel,column1,column2 ) VALUES ('xxx','999','111');"
    Write-Host "Préparation de l'envoi vers Oracle du script " -foregroundcolor yellow;
    Write-Host "$SQLCommandText" -foregroundcolor yellow;
    
    $SQLCommand = $oracleConnection.CreateCommand()
    $SQLCommand.CommandText = $SQLCommandText
    Write-Host "SQLCommand construite" -foregroundcolor yellow;
    
    $SQLCommand.ExecuteOracleNonQuery| out-null;
    Write-Host "Commande SQL envoyée au serveur"  -foregroundcolor yellow;
    La encore Ok, même à l'exécution, (pas même une petite exception...)
    Mais, il y a un mais... Cela ne fait rien du tout au niveau de la base...

    par contre si, je modifie le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $SQLCommandText ="INSERT INTO test_job_tab ( nom_appel,column1,column2 ) VALUES ('xxx','999','111') "
    Write-Host "Préparation de l'envoi vers Oracle du script " -foregroundcolor yellow;
    Write-Host "$SQLCommandText" -foregroundcolor yellow;
    
    $SQLCommand = $oracleConnection.CreateCommand()
    $SQLCommand.CommandText = $SQLCommandText
    Write-Host "SQLCommand construite" -foregroundcolor yellow;
    
    $SQLCommand.ExecuteNonQuery()| out-null;
    Write-Host "Commande SQL envoyée au serveur"  -foregroundcolor yellow;
    C'est à dire remplacement de ExecuteOracleNonQuery par ExecuteNonQuery() en n'oubliant surtout pas de supprimer le ; de la commande sql (autrement Exception lors de l'appel de «*ExecuteNonQuery*» avec «*0*» argument(s)*: «*ORA-00933: la commande SQL ne se termine pas correctement), je créer bien une nouvelle ligne dans la table...

    Par contre, j'obtiens un résultat identique à celui de ExecuteOracleNonQuery si j'omets de mettre les parenthèses à la suite de ExecuteNonQuery ; (pas d'erreur, mais aucune écriture dans la base) .

    Donc mon problème sur le ExecuteOracleNonQuery doit donc venir de l'absence des parenthèses.
    Mais là encore blocage, je dois déclarer en paramètre lors de l'appel une variable RowId de type OracleString Réf Msn Microsoft, mais comment fait-on cela en powershell ?

    Voilà, c'est tout comme info.

    Ha si ! Au secours !!!!

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par beretb Voir le message
    Donc mon problème sur le ExecuteOracleNonQuery doit donc venir de l'absence des parenthèses.
    Oui, sans les () PS renvoi les signatures d'une méthode.
    Citation Envoyé par beretb Voir le message
    Mais là encore blocage, je dois déclarer en paramètre lors de l'appel une variable RowId de type OracleString Réf Msn Microsoft, mais comment fait-on cela en powershell ?
    Selon la doc, c'est un paramètre Out, en PS on utilise [REF]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $RowID=$null
    $SQLCommand.ExecuteOracleNonQuery([REF]$RowID)
    Pas besoin de typer la variable PS s'en charge. Code à vérifier

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Par défaut
    Bonjour Laurent et surtout merci pour ta réponse.
    Malheureusement, même en déclarant comme tu me l'indiques, je me fais insulter :
    Exception lors de l'appel de «*ExecuteOracleNonQuery*» avec «*1*» argument(s)*: «*Impossible de convertir la valeur Null en type «*System.Data.OracleClient.OracleString*».*»

    J'ai testé avec ou sans le point virgule dans la commande, même résultat...

    Peut-être suis-je parti dans une mauvaise voie.
    La finalité de tout cela étant surtout de lire un fichier (en réalité une trentaine) contenant du code sql et de le faire assimiler par le serveur Oracle (code avec création de tables, de package, insertion de lignes, etc,
    etc
    .


  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Essaie en affectant une structure de type OracleString à $RowID ou une chaine vide.

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    On doit passer l'adresse d'une structure existante créé par l'appelant et pas seulement l'adresse d'une variable.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Par défaut
    Bonjour Laurent.

    Nouveau test avec une chaîne vide lors de l'init de RowId.

    Résultat en demi teinte.

    Si on enlève le ; de la commande, le code s’exécute correctement et l'enregistrement est créé en base.

    Par contre, si on le maintient, comme cela doit être avec un ordre sql, d'autant plus si le script contient plusieurs insert (par exemple), j'ai l'erreur
    Exception lors de l'appel de «*ExecuteOracleNonQuery*» avec «*1*» argument(s)*: «*ORA-00933: la commande SQL ne se termine pas correctement

    Donc cette solution n'est pas viable, et j'ai perdu trop de temps à la tester, je vais donc me rabattre sur une autre solution à moins d'un miracle sur celle-ci.

    Bon vendredi, bon week-end et encore merci pour ton aide.

    (je me garde un délai pour la rédaction du miracle s'il existe...)

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

Discussions similaires

  1. Creation script Sql de base de données et erreur NOLOCK
    Par miniquick dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/04/2009, 09h12
  2. Requete sql sur base oracle
    Par kiro4 dans le forum SQL
    Réponses: 4
    Dernier message: 18/03/2009, 08h59
  3. Importer du XML vers base Oracle 10g
    Par loul19 dans le forum Import/Export
    Réponses: 0
    Dernier message: 10/09/2008, 11h52
  4. Probleme de date dans requete SQL vers base de donnée MS Access
    Par Uren dans le forum Persistance des données
    Réponses: 1
    Dernier message: 04/08/2008, 13h06
  5. depuis un fichier texte vers base oracle
    Par foulla002 dans le forum JDBC
    Réponses: 5
    Dernier message: 27/07/2006, 12h48

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