JDBC Appel à l'Oracle de la Procédure Stockée avec des paramètres de type PL SQL de la table
J'ai besoin de faire JDBC appel à une procédure avec des paramètres de type PL/SQL de la table.
Je suis en train d'essayer avec struct objet. Mais je ne suis pas de faire quelque chose de correct.
J'obtiens l'erreur:
ORA-04043: objet "scott"."objListStruct" n'existe pas.
Voici l'extrait de code:
conn = Application.getDBConnection();
CallableStatement cStmt = null;
cStmt= conn.prepareCall("{call package1.procedure1"+"(?)}");
Struct objListStruct = conn.createStruct("objListStruct",
objNameArr.toArray());
cStmt.setObject(1, objListStruct,Types.STRUCT);
Le paramètre, "?" pour cette procédure, est de type:
TYPE t_name IS TABLE OF TABLE1.name%TYPE
Toute la perspicacité pour faire ce travail est très apprécié.
Grâce
objNameArr est une liste de tableaux avec des données prête à y aller.
Dans un de vos commentaires, vous dites "à proprement parler, le type doit être de TYPE t_name EST le TABLEAU DE TABLE1.nom du%de TYPE d'INDEX par BINARY_INTEGER". Qui est en conflit avec la définition de type de vous donner ici. Ce qui est correct? Est le type Oracle défini dans SQL ou PL/SQL?
Dans un de vos commentaires, vous dites "à proprement parler, le type doit être de TYPE t_name EST le TABLEAU DE TABLE1.nom du%de TYPE d'INDEX par BINARY_INTEGER". Qui est en conflit avec la définition de type de vous donner ici. Ce qui est correct? Est le type Oracle défini dans SQL ou PL/SQL?
OriginalL'auteur Kumar S | 2012-05-22
Vous devez vous connecter pour publier un commentaire.
Deux choses:
1) Le plus simple est de ne pas passer quelque chose à l'intérieur. Créer une table temporaire globale, insérer toutes les données dont vous avez besoin, puis d'appeler le proc, qui lit à partir de votre table temporaire. Juste être prudent que vous n'êtes pas autocommitting votre connexion.
2) Si vous ont passer dans un tableau, vous aurez besoin de descendre et d'utiliser l'Oracle de type Tableau. L'Oracle de type tableau est lié au type de table. Donc quelque chose de similaire (NOTE: le code n'est pas testé!) pour cela:
Qu'est-ce que MY_ARRAY_TYPE?
Dans votre exemple, il sera t_name.
Merci @Nick je me rapproche d'elle, mais encore un peu loin. Strictement parlant, le type doit être de TYPE t_name EST le TABLEAU DE TABLE1.nom du%de TYPE d'INDEX par BINARY_INTEGER. Si j'ajoute l'INDEX PAR créer le type, j'obtiens l'erreur: PL SQL de type non autorisé. avec INDEX PAR article, je suis de l'exécution d'erreur: opération non permise: Ordinal de liaison et Nommé liaison ne peut pas être combiné! -@Kumars
Le message d'erreur est: mauvais nombre ou les types d'arguments dans l'appel à procedure1
OriginalL'auteur Nick
Le code ci-dessus fonctionne.
Plus le matériau de référence est disponible sur:
Obligatoire DANS les Paramètres
OriginalL'auteur Kumar S