utiliser des booléens en pl sql
J'ai une fonction pl sql qui vérifie si un particulier emp id existe ou non, qui est:
CREATE OR REPLACE FUNCTION checkEmpNo(eno numeric)
RETURN boolean IS
emp_number number;
BEGIN
SELECT emp_id INTO emp_number
FROM emp;
IF eno=emp_number
THEN
return true;
ELSE
return false;
END IF;
END checkEmpNo;
la fonction compile correctement .. Mais lorsque j'essaie d'exécuter la fonction:
DECLARE
exist boolean;
BEGIN
exist=checkEmpNo(1);
dbms_output.put_line(exist);
END;
elle renvoie l'erreur:
ORA-06550: line 5, column 1:
PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'
ORA-06550: line 5, column 1:
PL/SQL: Statement ignored
3. BEGIN
4. exist:=checkEmpNo(1);
5. dbms_output.put_line(exist);
6. END;
EDIT:
j'ai aussi essayé ceci:
DECLARE
exist boolean:=true;
BEGIN
if(exist=checkEmpNo(1))
then
dbms_output.put_line('true');
else
dbms_output.put_line('false');
end if;
END;
Et il renvoie l'erreur: ORA-01422: exact fetch returns more than requested number of rows
À l'aide!!
D'une façon générale, le codage remarque, vous êtes en passant un paramètre nommé brian eno qui est censé être équivalent à emp_id. Utilisation emp_id comme le nom du paramètre, et faites-le précéder du nom de la fonction lorsque vous l'utilisez dans une instruction SQL (ie. emp_id = checkEmpNo.emp_id)
OriginalL'auteur Chandeep | 2012-11-26
Vous devez vous connecter pour publier un commentaire.
dbms_output.put_line
n'est pas surchargé d'accepter un argument booléen. Vous pouvez faire quelque chose commepour convertir le booléen dans une chaîne de caractères que vous pouvez ensuite passer à
dbms_output
.L'ORA-01422 erreur est une question totalement distincte. La fonction
checkEmpNo
comprend laSELECT INTO
déclarationUn
SELECT INTO
va générer une erreur si la requête ne renvoie rien d'autre que de 1 ligne. Dans ce cas, si il y a plusieurs lignes dans leemp
table, vous obtiendrez une erreur. Ma conjecture est que vous voulez que votre fonction pour faire quelque chose commej'ai utilisé ceci: DÉCLARER existent boolean:=true; BEGIN if(existe=checkEmpNo(1)) then dbms_output.put_line('true'); else dbms_output.put_line('false'); end if; END;
J'ai mis à jour ma réponse avec une discussion de l'ORA-01422 d'erreur que vous avez ajouté à votre question.
il fonctionne, mais renvoie toujours vrai! :\
Désolé, corrigé.
OriginalL'auteur Justin Cave
Alternativement, vous pouvez utiliser l'Oracle de la fonction
diutil.bool_to_int
pour convertir une valeur de type boolean pour un entier: Vrai -> 1, Faux -> 0.OriginalL'auteur Rene