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 !!!!