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

PL/SQL Oracle Discussion :

FORALL UPDATE PLS-00436


Sujet :

PL/SQL Oracle

  1. #1
    Membre très actif
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Par défaut FORALL UPDATE PLS-00436
    Bonjour,

    Je voudrais utiliser FORALL UPDATE .pour faire mise à jour des données en masse.
    J’ai declaré :
    un curseur p_ref _exception
    un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TYPE    TypTab_excpt IS TABLE OF p_ref_ exception%ROWTYPE;
                               Tab _excpt  TypTab _excpt;
    script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    BEGIN
                   OPEN p_ref _exception;
                   FETCH p_ref _exception   BULK COLLECT INTO Tab_excpt;
                   CLOSE p_ref _exception;
                   taille_excpt:=Tab_excpt.COUNT;
                   IF taille_excpt>0 THEN
                      FORALL idx IN 1..taille_excpt
                        UPDATE p_monitor_temp
                              SET count = Tab_excpt(idx).r_Cnt      
                            WHERE id = Tab_sweep_excpt(idx).r_id
     ………………………………..
     END
    J ai eu le message suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Error] PLS-00436 (4853: 55): PLS-00436: implementation restriction: cannot reference fields of BULK In-BIND table of records
    Comment faire pour s’en sortir de ce problème

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Jusqu'en V10, il n'est pas possible dans un FORALL de faire référence individuellement aux champs d'une collection multicolonne. Vous êtes en plein dans ce cas vu que votre déclaration utilise un %ROWTYPE.

    Cette restriction disparaît en V11.

    Sinon, une des possibilités est de déclarer une collection par colonne ramenée par votre SELECT.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    declare
    	type typ_tab_empno is table of emp.empno%type;
    	type typ_tab_nom   is table of emp.nom%type;
    	v_tab_empno typ_tab_empno;
    	v_tab_nom typ_tab_nom;
    begin
    	select empno, nom bulk collect into v_tab_empno, v_tab_nom from emp;
    	forall i in v_tab_empno.first..v_tab_empno.last
    		update emp set comm=length(v_tab_nom(i))*100
    		where empno=v_tab_empno(i);
    end;
    /

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Et cette solution avec TREAT dont je découvre l'existence à l'instant :
    http://www.oracle-developer.net/display.php?id=410

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

Discussions similaires

  1. Requête update à partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/02/2024, 11h40
  2. Pb d'update dans une DataGrid
    Par bidson dans le forum XMLRAD
    Réponses: 11
    Dernier message: 27/05/2003, 14h11
  3. [dBase]il y a mieux que la commande sql UPDATE ?
    Par sana72 dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 12/12/2002, 11h59
  4. Réponses: 3
    Dernier message: 10/11/2002, 11h03
  5. update et virgule
    Par Delph dans le forum Bases de données
    Réponses: 8
    Dernier message: 27/08/2002, 14h40

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