2017-03-17 1 views
0

J'utilise ODP.NET et base de données Oracle. Je dois enregistrer les données de champ CLOB plus de 4000 longueur. Lorsque je le fais par le biais d'une simple instruction SQL et ExecuteNonQuery exception se produit - PLS-00172: littéral de chaîne trop long. La question est de savoir comment enregistrer ces données lond? Je ne peux pas utiliser/créer des procédures - aucun moyen d'obtenir la permission. Je peux seulement utiliser ODP.NET.Insérer à CLOB via ODP.NET

+0

Dans ce cas, demandez à votre administrateur de base de données une solution s'il ne vous permet pas de créer une fonction. –

+0

S'il vous plaît nous montrer votre code. –

Répondre

0
Function OracleInsert($query, $connectionString){ 
$connection = New-Object Oracle.ManagedDataAccess.Client.OracleConnection($connectionString) 
$connection.open() 
$command=$connection.CreateCommand() 
$command.CommandText=$query + " returning Id into :newrowId" 
$param = New-Object Oracle.ManagedDataAccess.Client.OracleParameter("newrowId",[Oracle.ManagedDataAccess.Client.OracleDbType]::Decimal,[System.Data.ParameterDirection]::ReturnValue) 
$command.Parameters.Add($param) 
$reader=$command.ExecuteNonQuery() 
$connection.Close() 
return [System.Convert]::ToDecimal($command.Parameters["newrowId"].Value.Value) 

}

code forme powershell mais il n'a pas d'importance. Si j'insère l'instruction statement> 4000, une erreur se produit.

+0

Il n'y a aucune mention de CLOB. Avez-vous un exemple pour '$ query'? –

+0

Voulez-vous dire longueur de '$ query' est plus grand que 4000 caractères? Je pense que dans ce cas, il n'y a pas d'autre moyen que d'utiliser une procédure/fonction, car cela ressemble à une limitation de Oracle.ManagedDataAccess.Client. –