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

SQL Oracle Discussion :

Erreur champ long ORA-01461


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Par défaut Erreur champ long ORA-01461
    Bonjour à tous et merci par avance de consacrer un peu de temps à mon problème.

    Je travail sur Oracle 10.2.0.4.0 et j'utilise le client Toad pour l'exécution de mes scripts.

    Dans un contexte de correction de donnée sur un champ de type long, j'ai crée une fonction PL/SQL pour mettre à jour mon champs qui contient un bloc HTML (Il s'agit d'une table d'historique de mail envoyé).

    Le nom de la table et PS_VB_MAIL_HIST et a pour clé primaire VB_ID_MAIL

    voici le code de fonction :

    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
    SET DEFINE OFF;
    CREATE OR REPLACE FUNCTION VB_UPDATE_MAIL_DIFFUSION(
    vb_s_param1 IN varchar2)
    RETURN varchar2
    IS
    vb_s_result VARCHAR2(32767);
    BEGIN
    FOR f IN  (select a.vb_id_mail, a.vb_hub_email from ps_vb_mail_hist a where a.vb_agency_list is null and a.vb_id_mail_model = '2')
    LOOP
    UPDATE ps_vb_mail_hist
    SET vb_hub_email = REPLACE(REPLACE(REPLACE(f.vb_hub_email, CHR(13), ' '), CHR(10), ' '), '<td width = 15%>A :</td>  <td width = 55%>','<td width = 15%>A :</td><td width = 55%  style="word-wrap:break-word; width =300px;">')
    WHERE vb_id_mail = f.vb_id_mail;
    END LOOP;
    FOR f IN  (select a.vb_id_mail, a.vb_hub_email from ps_vb_mail_hist a where a.vb_agency_list is null and a.vb_id_mail_model = '2')
    LOOP
    UPDATE ps_vb_mail_hist
    SET vb_hub_email = REPLACE(REPLACE(REPLACE(f.vb_hub_email, CHR(13), ' '), CHR(10), ' '), '<td width = 15%>cc :</td>  <td width = 55%>','<td width = 15%>cc :</td><td width = 55%  style="word-wrap:break-word; width =300px;">')
    WHERE vb_id_mail = f.vb_id_mail;
    END LOOP;
    vb_s_result := 'Fin';
    RETURN vb_s_result;
    end VB_UPDATE_MAIL_DIFFUSION;
    /
    SET DEFINE ON;
     
    sho errors
     
    commit;

    Je n'ai aucune erreur à la compilation

    Pour éxécuter cette fonction, j'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    declare 
      x varchar2(400);
    begin 
      x:=VB_UPDATE_MAIL_DIFFUSION('1');
    end;
    /
    commit;
    Sur ma base de dev, l'éxécution ne pose aucun probléme. Cependant en recette j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ORA-01461: can bind a LONG value only for insert into a LONG column 
    ORA-06512: at "SYSADM.VB_UPDATE_MAIL_DIFFUSION", line 9 
    ORA-06512: at line 4
    Aprés quelque recherche, il s'agirait d'un probléme de donnée dépassant une limite de caractère pour le champ de type long. La solution proposée dans le topic suivant propose de passer en CLOB :

    Solution

    Cependant n'existe t-il pas un moyen de mettre à jour ma table sans changer le format du champ ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    LONG est un type déprécié depuis Oracle 8 (ou 8i) !
    Si vous en avez l'opportunité, profitez-en pour migrer vers un CLOB.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Par défaut
    Bonjour et merci pour votre réponse.

    Travaillant dans l'ERP peoplesoft, la construction des tables s'effectue en 2/3 par un outil spécifique à peoplesoft (Application Designer). Et la seule option pour les champs long reste le type "Long". Mon choix est donc "bridé" par l'ERP...

Discussions similaires

  1. [JDBC] CLOB et ORA-01461
    Par biozaxx dans le forum JDBC
    Réponses: 3
    Dernier message: 22/12/2008, 11h40
  2. ORA-00932 Replace sur un champ Long impossible ?
    Par Phénélas dans le forum Oracle
    Réponses: 5
    Dernier message: 16/01/2007, 12h53
  3. Recherche sur un champ LONG
    Par Endymion222 dans le forum Oracle
    Réponses: 14
    Dernier message: 29/11/2005, 15h31
  4. DB_Link et type LONG : ORA-00997
    Par learn dans le forum Oracle
    Réponses: 6
    Dernier message: 31/03/2005, 23h16
  5. Problème avec un champ 'long'
    Par yannick dans le forum Débuter
    Réponses: 2
    Dernier message: 25/07/2003, 15h17

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