L'appel d'une procédure Oracle PL / SQL en Java à l'aide d'un CallableStatement avec un paramètre booléen IN donne une erreur Oracle PLS-00306:
J'ai un pl/sql procédure sur une base de données Oracle 11g qui a les paramètres suivants:
PROCEDURE validate_product
( product_id_in IN varchar2 ,
username_in in varchar2,
source_in varchar2,
source_id_in varchar2 ,
isEuProduct in boolean ,
error_code out varchar2,
product_type out varchar2
)
Je suis en train d'appel au-dessus de la procédure stockée à partir de l'intérieur de java à l'aide du code suivant:
cstmt = getConnection().prepareCall("begin " + DBUtil.SCHEMANAME + ".PRODUCT_UTILITIES.validate_product(:1,:2,:3,:4,:5,:6,:7); end;");
cstmt.registerOutParameter(6, Types.CHAR);
cstmt.registerOutParameter(7, Types.CHAR);
cstmt.setString(1, productId);
cstmt.setString(2, username);
cstmt.setString(3, sourceName);
cstmt.setString(4, sourceId);
cstmt.setBoolean(5, isEUProduct);
cstmt.execute();
Les types de java variables sont toutes String
à l'exception de isEUProduct
qui est boolean
. Chaque fois que je lance le programme ci-dessus j'obtiens l'erreur suivante:
PLS-00306: wrong number or types of arguments in call to validate_product ORA-06550: line 1, column 7: PL/SQL: Statement ignored"
J'ai débogué le programme d'une centaine de fois, mais tout semble être le bon type et le nombre d'arguments sont corrects.
Je suis complètement coincé mais qu'est ce que je fais de mal. Après avoir googlé autour, j'ai penser que peut-être je ne suis pas le réglage du paramètre booléen correctement.
Des idées?
source d'informationauteur ziggy
Vous devez vous connecter pour publier un commentaire.
J'ai été surpris quand nous avons couru dans le présent, mais l'Oracle JDBC Driver ne prend pas en charge la transmission des valeurs booléennes dans des Procédures Stockées.... Ya, je ne suis pas en train de l'inventer 🙂
Les Paramètres booléens en PL/SQL Stockées Procédures
Je pense que c'est ici la question
vous appelle à partir de java comme ci-dessus, Mais vous avez déclaré dans la procédure de paramètre de sortie comme
varchar2
,cela signifie qu'il y est une incompatibilité de type de données.Essayer ce code,
J'espère que cela va fonctionner..
Il existe une solution simple pour la restriction, qui ne nécessite pas de procédure de wrapper, enroulez simplement le paramètre booléen en PL/SQL dans un
CASE
déclaration et l'utilisation d'un nombre Entier pour la liaison:Vous pouvez envelopper le nombre Entier au cours de lier l'inverse, si votre méthode utilise booléenne, par exemple:
Je soupçonne que la déclaration pourrait nécessiter des modifications à celui-ci (comme le type des paramètres est varchar2 dans la procédure):-
Toutefois, si cela ne fonctionne pas, alors essayez de modifier le prepareCall déclaration ci-après également :-