2017-04-19 4 views
0

Je suis un débutant avec pl sql et je suis confronté à quelques problèmes avec l'insertion dans des tableaux imbriqués (je les utilise juste pour tester une procédure). donc mon code est:Insérer dans la table imbriquée plsql

insert into t_prenotazioni 
     (nro_cliente, data_disponibilita) 
    values 
     (righe.nro_cliente, v_data_disponibilita); 

où t_prenotazioni est une table d'un type défini par moi, righe.nro_cliente est une valeur que je reçois d'un curseur et v_data_disponibilita est une variable. L'erreur que je reçois est:

PLS-00330 utilisation non valide du nom de type ou sous-type

+0

Vous pouvez INSERT INTO une table, pas une variable. Si vous avez besoin de remplir une variable, vous avez besoin d'une affectation ou d'une partie de SELECT ... INTO .... FROM ... Essayez de mieux expliquer ce que vous essayez de faire pour obtenir de l'aide. – Aleksej

+0

Merci. J'essaie de déclarer une table imbriquée et je l'ai fait comme ceci: "type prenotazioni est une table de type_prenotazioni; t_prenotazioni prenotazioni;". Ensuite, j'essaie d'insérer dans cette table, le type de la table a 2 champs. – editLxo

+0

@editLxo Vous devez utiliser ceci dans un bloc PL./SQL – user75ponic

Répondre

1

Vous essayez de faire probablement quelque chose comme:

declare 
    type type_prenotazioni is record(nro_cliente number, data_disponibilita date); 
    type prenotazioni is table of type_prenotazioni; 
    vPrenotazioni prenotazioni; 
begin 
    vPrenotazioni := new prenotazioni(); 
    vPrenotazioni.extend(1); 
    vPrenotazioni(1).nro_cliente := 10; 
    vPrenotazioni(1).data_disponibilita := sysdate; 
    -- 
    for i in vPrenotazioni.first .. vPrenotazioni.last loop 
     dbms_output.put_line(vPrenotazioni(i).nro_cliente || ' - ' || 
           to_char(vPrenotazioni(i).data_disponibilita, 'dd/mm/yyyy') 
           ); 
    end loop; 
end; 

Je stronlgy recommande jeter un oeil à the Oracle documentation pour améliorer vos connaissances; Ce n'est qu'un petit exemple simple, mais il y a beaucoup de choses différentes que vous voudrez peut-être faire.

+0

Merci pour la réponse. Ma seule question maintenant est quand vous faites vPrenotazioni.extend (1), à l'insertion suivante (parce que j'insère non seulement 1 valeur dans la table mais multiple) la valeur qui était dans la table est écrasée? – editLxo

+0

Ici je m'étends pour insérer une seule valeur; Si vous devez insérer plus d'un enregistrement, vous devez l'étendre en conséquence, puis utiliser vPrenotazioni (i) où i est votre numéro. Ou, vous pouvez regarder SELECT ... BULK COLLECT INTO .... Jetez un oeil à quelques exemples BULK COLLECT pour apprendre un moyen de peupler massivement vos structures – Aleksej

+0

Ok merci beaucoup. – editLxo