Bonjour,

J'ai besoin d'un peu d'aide sur cette procédure dont le but est simplement de construire une requête update qui met à jour un champ NCLOB :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
(
tabName                    IN      	VARCHAR2 DEFAULT NULL,
fieldUpdateName            IN      	VARCHAR2 DEFAULT NULL,
fieldValue                 IN      	nclob DEFAULT NULL,
fieldIdName                IN      	VARCHAR2 DEFAULT NULL,
fieldId                    IN      	int DEFAULT NULL
)
AS
BEGIN  	
  EXECUTE IMMEDIATE 'UPDATE ' || tabName || ' SET ' || fieldUpdateName || '  = '':x'' WHERE ' || fieldIdName || ' = ' || fieldId USING fieldValue; 
END;
Lorsque j'appele ma procédure depuis SQL*Plus, j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
ERREUR à la ligne 1 :
ORA-01006: La variable bind n'existe pas
ORA-06512: à "USERPORTAL.SP_GEN_FIELD_UPDATE", ligne 24
ORA-06512: à ligne 1
1- Je pense devoir utiliser une variable bind car EXECUTE IMMEDIATE de la pas les types Unicode (NVARCHAR et NCLOB) or fieldValue est obligatoirement NCLOB,
Je n'ai trouvé que ce moyen pour éviter le problème de "type incorrect" dans le EXECUTE IMMEDIATE

2- Je suis preneur pour tout autre moyen de mettre à jour ce champ NCLOB, mais j'aiemrai quand même comprendre pourquoi ça ne marche pas.

3- pour info, j'appele cette procédure depuis une appli en C#

Merci