Je veux créer une procédure avec la condition suivante si la condition renvoie NULL, il doit afficher un message d'erreur, puis une erreur.
Pour le message d'erreur, j'utilise dbms_output.put_line et pour erreur j'utilise une exception, alors quelqu'un peut aussi que quelqu'un puisse m'aider à sortir de ces p> J'essaye ces P> create or replace procedure validate_terminate
declare
l_yes out varchar2 (1);
null_found exception;
is
begin
select 'Y'
into l_yes
from dual
where exists
(select 'Y'
from pa_expenditure_items_all paei, pa_expenditures_all pae
where paei.expenditure_id = pae.expenditure_id
and pae.incurred_by_person_id =&person_id
and paei.cost_distributed_flag = 'N');
if l_yes is null
then
dbms_output_put_line ('Condition is not met');
raise null_found;
end if;
exception
when null_found then
dbms_output_put_line('CANNOT PROCESS TERMINATE');
end;
3 Réponses :
Lors de la déclaration d'une procédure, utilisez Vous n'avez pas besoin de vérifier si Vous n'avez pas besoin de sélectionner une seconde fois (à partir de Dual). Le premier Select fonctionne bien. P> Ne mettez pas C'est Utiliser la variable de liaison est code> au lieu de
déclarer code> - n'utilisez pas les deux.
l_yes Code> est NULL - Si votre sélection retourne 0 rangs, il augmentera automatiquement un
no_data_found code> exception. Juste attraper ça. P>
out code> après
l_yes code> dans la déclaration. C'est juste
l_yes variar2 (1); code>. P>
dbms_output.put_line code>. p>
: PERSON_ID CODE> au lieu de la variable de substitution
et de la personne_id code> p>
HI Kfinity iam Obtenir ces erreurs maintenant Erreur (11,53): Pls-00049: Variable Bad Bind 'Person_id'Error (11,53): Pls-00049: mauvaise variable de liaison' person_id '
Votre manipulation de la déclaration et des exceptions variables est inappropriée.
Essayez ci-dessous Code: p> acclamations !! p> p> p>
PL / SQL n'est pas un langage de programmation interactif. Il s'agit d'un outil de matérialisation SQL et de code associé à appeler à partir d'autres clients. Ce sont ces clients qui gèrent les entrées de l'utilisateur et d'autres choses de l'interface utilisateur.
de sorte que la manière idiomatique d'écrire votre procédure serait de transmettre la personne_id comme paramètre .... p>
exec validate_terminate(&person_id)
Les procédures ne peuvent pas inviter un utilisateur à une entrée lorsqu'ils exécutent. Si vous voulez que cela fonctionne pour un
personne_id code>, vous déclarez normalement un paramètre et laissez l'appelant de passer en valeur. Est-ce ce que vous voulez faire? Ou voulez-vous faire un bloc PL / SQL anonyme et avoir l'outil client (
sql * plus code> ou quelque chose d'autre) vous invite à la valeur lorsque le bloc est soumis?