Procédure stockée Oracle à l'aide du tableau comme paramètre pour insérer un tableau
J'ai été la recherche d'un exemple clair de cette situation, mais sans succès. Désolé si ça a déjà été répondu.
Je suis en train de faire quelque chose d'assez simple - une procédure stockée qui va prendre l'entrée et les insérer dans une table. Je veux prendre un tableau de plusieurs lignes et de faire de l'insertion une fois pour toutes.
Je pensais que ce serait simple, mais je n'ai pas trouvé un exemple qui montre moi.
Dans beaucoup d'exemples, je vois les gens de créer une fonction pour retourner un tableau - est-ce que je dois faire?
Pour l'instant j'ai:
CREATE OR REPLACE TYPE my_type is table of ( name varchar2(20), phone varchar2(10));
CREATE OR REPLACE PROCEDURE customer.insert_mydata(v_my_data my_type )
AS
BEGIN
BEGIN
insert into mytable(Name, phone)
values (v_my_data.name, v_my_data.phone) ;
COMMIT;
END;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
---error logging );
END;
¿Avez-vous trouvez des erreurs lors de l'utilisation de votre script? Fondamentalement, l'approche est la même: la création d'un objet explicite du type, puis d'un autre type, comme un tableau de object_type et ensuite, vous définissez le paramètre avec la table_of type. Si vous nous dire sur les erreurs ou les échecs, je vais essayer de les aider.
Merci, je vais obtenir le message d'erreur et la poste. merci encore.
Merci, je vais obtenir le message d'erreur et la poste. merci encore.
OriginalL'auteur user1707389 | 2012-10-01
Vous devez vous connecter pour publier un commentaire.
Voici un exemple de ce que vous voulez atteindre.
Permet de créer un type d'objet qui contiendra
name
etphone
attributs comme si.Permet maintenant de créer un ensemble dont les éléments sont de
my_object
type:Et maintenant notre procédure, qui permet d'insérer dans une table particulière, les données transmis sous la forme d'une collection:
Démonstration:
Réponse au commentaire de
Je suppose que votre version Oracle est avant 11g. Donc, Pour contourner cette erreur(
PLS-00436 "implementation restriction".
) vous pouvez insérer des données à l'aide en-ligne de vue:Ou essayer de ne pas spécifier les noms de colonnes de la table dans l'instruction insert si le nombre de colonnes de la table que vous insérez dans et insérés les valeurs sont les mêmes:
OU utiliser le
FOR .. LOOP.. END LOOP
construire:Merci - toujours le même message d'erreur en utilisant soit la méthode d'insertion. Je suis sur 10g 10.2.0.4.0.
Étrange... Ok, essayez de
For .. loop .. end construct
. J'ai mis à jour la réponse.POUR .. BOUCLE... FIN de la BOUCLE travaillée. Merci!
POUR..la BOUCLE est beaucoup plus lent que pourtout ou un insert car dans la boucle for..il y a un changement de contexte entre le pl/sql et sql moteur oracle pour chaque valeur. Essayez une solution très simple à partir de ma réponse.
OriginalL'auteur Nick Krasnov
OriginalL'auteur user1944408