sous-requête scalaire dans l'instruction if Condition en PL/SQL
J'ai une Instruction if bloc similaire à ci-dessous qui échoue avec l'erreur
PLS-00103: Rencontré le symbole "SÉLECTIONNEZ" lorsque attend l'une des opérations suivantes....
Begin
If (select count(*) from Table1) > 0 then
dbms_output.put_line('Test');
end if;
end;
J'ai même Cas de déclaration qui fonctionne très bien
select
case
when (select count(*) from Table1) > 0
then 2
else
1
end
from dual
De ce que j'ai lu dans la Documentation d'Oracle le si et lorsque le support d'une Expression Booléenne, toutes les idées que les sous-requêtes sont prises en charge dans des Conditions Si.
Remarque: Les Déclarations ont été simplifiées, je ne suis pas vraiment à obtenir le nombre de l'ensemble de la table, donc pas de l'optimisation des suggestions s'il vous plaît
Vous devez vous connecter pour publier un commentaire.
Non, vous ne pouvez pas utiliser un SELECT dans la façon dont vous le souhaitez.
Dans votre exemple, à l'aide de CAS, vous n'êtes pas à l'aide d'un CAS "déclaration" -- vous à l'aide d'un CAS expression, qui se trouve être incorporé à l'intérieur d'une instruction SQL. Vous pouvez utiliser une sous-requête dans ce cas, parce que c'est dans le cadre d'une instruction SQL, pas de la procédure de déclaration. Vous ne seriez pas en mesure d'utiliser une sous-requête comme ceci dans une procédure de CAS.
Avez-vous appelé DBMS_OUTPUT.ACTIVER
Exemple rapide
Je ne crois pas que les sous-requêtes sont prises en charge dans des conditions SI... en PL/SQL attendent les SÉLECTIONNER pour donner un ensemble d'enregistrements, pas une seule valeur pour être utilisé dans une expression ou de la déclaration.