Pourquoi nous ne pouvons pas exécuter la procédure stockée dans une instruction select dans oracle? est-il une bonne raison?
create or replace procedure pr
is
v_date date;
begin
select sysdate into v_date from dual;
DBMS_output.put_line(v_date);
end pr;
- Veuillez expliquer ce que vous essayez de faire. Veuillez consulter comment faire pour formater le code source. Vous n'avez pas besoin de backticks, mais vous avez besoin de tiret à chaque ligne de 4 espaces.
- Si vous voulez exécuter la procédure à l'aide de l'instruction select, puis une approche est de conclure votre procédure avec une fonction et la fonction d'appel à l'aide de l'instruction select. Sinon utiliser une fonction au lieu d'une procédure et une fonction d'appel à l'aide de l'instruction select.
Vous devez vous connecter pour publier un commentaire.
Procédures ne sont pas autorisés dans les instructions SQL car le mélange déclarative et impérative styles de programmation est source de confusion.
Une instruction SQL est une liste de conditions - c'est à Oracle pour décider de la façon de produire le jeu qui correspond à ces conditions. Une procédure stockée PL/SQL est un ensemble d'instructions que de changer des choses dans une manière très prévisible.
Dans l'exemple ci-dessous, combien de fois doit
pr
être exécuté? Est-il exécuté avant ou aprèsid = 1
? Si les instructions SQL a un ordre pré-établi puis à l'optimiseur ne serait pas en mesure de pousser les prédicats de fusionner les sous-requêtes, etc., et la performance serait inacceptable.Même si une procédure a été utilisée dans le
select
liste, il ne peut pas faire sens. Par exemple, leselect
liste à l'intérieur d'unexists
est toujours ignoré.Mais en réalité, les instructions SQL parfois besoin d'interagir avec le monde extérieur, et certains de procédure logique est nécessaire. Les fonctions sont autorisés parce qu'ils généralement simplement calculer quelque chose et de retourner une valeur. Les fonctions normalement ne dépend pas de l'état du programme et ont beaucoup d'effets secondaires. Vos fonctions pourrait utiliser des variables de session, mettre à jour les tables (si elle est définie à
PRAGMA AUTONOMOUS TRANSACTION
), de définir un cadre, etc. Oracle ne pouvez pas vous arrêter de faire ces choses, mais pas les procédures dans les instructions SQL permettra au moins de décourager ce type de code.Procédure ne peut pas être exécutée à l'aide de l'instruction select, vous pouvez utiliser la fonction si vous voulez exécuter à l'aide de l'instruction select.
Si vous voulez exécuter la procédure à l'aide de l'instruction select, puis une approche est de conclure votre procédure avec une fonction et la fonction d'appel à l'aide de l'instruction select.
Maintenant envelopper la procédure avec une fonction
Et appeler la fonction à l'aide de l'instruction select