Oracle
 sql >> Base de données >  >> RDS >> Oracle

Ajouter une instruction IF ELSE

En ce qui concerne la façon de gérer ce type de problème de syntaxe en tant que débutant, je vous suggère de vous entraîner à le simplifier jusqu'au plus petit exemple possible, afin de ne pas être distrait par la logique de jointure.

Par exemple, vous pouvez rapidement tester cela et voir que cela ne fonctionnera pas :

declare
    rc sys_refcursor;
begin
    open rc for
        case
            when 1 = 1 then select * from dual  -- not valid
        end;
end;

qui échoue avec

ORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...

parce que le open rc for select la syntaxe doit être une seule instruction et ne peut pas être divisée avec une logique conditionnelle.

Remarquez qu'il n'y a pas de create function , paramètres ou jointures etc pour compliquer les choses. Vous pouvez ajouter tous ces éléments une fois que vous avez corrigé la syntaxe. Le case la syntaxe de l'instruction est ici . (Notez qu'il existe plusieurs types de case .) Il doit être soit

declare
    rc sys_refcursor;
begin
    case
        when 1 = 1 then
            open rc for select * from dual;
    end case;
end;

ou l'équivalent en utilisant if :

declare
    rc sys_refcursor;
begin
    if 1 = 1 then
        open rc for select * from dual;
    end if;
end;