Je vais appeler une fonction, et définir certains paramètres par nom, par exemple:Java nommé le nom de paramètre (pour résultat de la fonction Oracle JDBC)
Connection c = null;
ResultSet rs = null;
String query;
PreparedStatement ps;
CallableStatement cs = null;
try {
c = DbUtils.getConnection();
cs = c.prepareCall("{? = call get_proc_name(?, ?) }");
cs.registerOutParameter(1, OracleTypes.VARCHAR);
cs.setInt("in_proc_type", ProcTypes.SELECT);
cs.setLong("in_table_id", tableId);
// here I should use something like cs.registerOutParameter("result", OracleTypes.VARCHAR);
cs.execute();
paramètres de la fonction PL/SQL sont:
CREATE OR REPLACE FUNCTION get_proc_name
(
in_proc_type IN NUMBER, /*1 - insert, 2 - update, 3 - delete, 4 - select*/
in_table_name IN VARCHAR2 := NULL,
in_table_id IN NUMBER := NULL,
in_table_type_id IN NUMBER := NULL,
is_new IN NUMBER := 0
) RETURN VARCHAR2
La question est de savoir comment enregistrer le résultat en tant que paramètre out, puis l'obtenir de oracle à Java? Je peux enregistrer les paramètres in/out par nom, parce que je connais leurs noms de fonction, mais je ne sais pas comment obtenir le résultat de la fonction, quel nom de variable utiliser pour cela.
Les manuels décrivent uniquement les paramètres d'entrée/sortie d'utilisation avec des procédures et non des fonctions.
Oracle version: 11.1.0.6.0 version Java: 1.6.0_14
J'ai une exception "Le nombre de noms de paramètres ne correspond pas au nombre de praremeters enregistrés" en ligne avec "cs.execute();" .... p.s. J'ai juste oublié de supprimer cette ligne quand posté le code. – Kerb
IIRC vous ne pouvez pas mélanger des paramètres positionnels et nommés, il semble que vous devez utiliser des paramètres positionnels pour l'ensemble de l'instruction, c.setInt (2, ProcTypes.SELECT); cs.setLong (3, tableId); –