PL/SQL d'Oracle Requête Avec l'Instruction if
Je veux mettre en œuvre une requête qui ne retourne que l'utilisateur connecté et affiche il y enregistrer seulement, que j'ai fait comme suit et il fonctionne:
SELECT * FROM EMPLOYEE
WHERE UPPER(username) = v('APP_USER')
Cependant, j'ai une autre colonne appelée User_Type, et un utilisateur peut être de type 1, 2 ou 3. Si j'ai un utilisateur de type 1, je veux la requête pour aussi retourner toutes les tables enregistre aussi en tant qu'utilisateur de type 1 est un admin.
J'ai pensé faire comme ceci:
BEGIN
SELECT * FROM Employee
WHERE upper(username) = v('APP_USER')
IF User_Type = 1
THEN SELECT * FROM Employee
END IF;
END;
/
Mais il ne fonctionne pas dans l'APEX Oracle PLSQL.
Des suggestions?
Vous devez vous connecter pour publier un commentaire.
De ce que je comprends, vous avez besoin d'essayer ceci:
La sortie est stockée dans la table imbriquée variable
tbl_emp
.EDIT:
Il peut être réalisé à l'aide de pure SQL aussi, comme ceci:
Choisissez celle qui vous convient le mieux.
Vous voulez tous les enregistrements d'utilisateurs avec l'
UPPER(username)
êtrev('APP_USER')
ouUser_Type
étant de 1? Ensuite, utilisez simplementOR
:Si ce n'est pas ce que vous voulez dire, alors pouvez-vous expliquer plus clairement?
upper(username) = v('APP_USER')
?Essayer:
distinct
phobique. Pouvez-vous expliquer l'impact sur les performances?distinct
est inclus sur la possibilité que plus d'un enregistrement de l'employé satisfait auxUPPER(e1.username) = v('APP_USER')
condition - si cela n'arrivera jamais alors ladistinct
peut être retiré. Il aurait probablement un impact significatif sur les performances lors de l'interrogation d'une assez grande table - dire plusieurs centaines de milliers d'enregistrements, mais l'employé tables sont en général relativement faible, de sorte que l'impact sur les performances est susceptible d'être relativement faible.