oracle appeler la procédure stockée à l'intérieur de sélectionner
Je suis en train de travailler sur une requête (SELECT) et j'ai besoin d'insérer le résultat de celui-ci dans un tableau.
Avant de faire l'insert, j'ai quelques vérifications à faire, et si toutes les colonnes sont valables, je vais faire de l'insertion.
La vérification se fait dans une procédure stockée. La même procédure est utilisée ailleurs.
Donc, je pense qu'en utilisant la même procédure pour faire mes vérifications.
La procédure ne les vérifications et insérer les valeurs est tous OK.
Je tryied pour appeler la procédure à l'intérieur de mon SELECT, mais il ne fonctionne pas.
SELECT field1, field2, myproc(field1, field2)
from MYTABLE.
Ce genre de code ne fonctionne pas.
Je pense qu'il peut être fait à l'aide d'un curseur, mais je voudrais éviter les curseurs.
Je suis à la recherche de la solution la plus simple.
Personne, une idée ?
source d'informationauteur CC.
Vous devez vous connecter pour publier un commentaire.
PL/SQL boucle:
SQL ne peut utiliser les fonctions de la projection: il a besoin de quelque chose qui renvoie une valeur. Alors, vous allez écrire certaines fonctions. C'est la mauvaise nouvelle. Les bonnes nouvelles sont, vous pouvez ré-utiliser tous les investissement dans les procédures stockées.
Voici une procédure qui respecte entièrement les affaires de la règle: seuls les gestionnaires peuvent avoir un salaire élevé.
Parce que c'est une procédure que nous ne pouvons l'utiliser dans une instruction SELECT; nous avons besoin de l'envelopper dans une fonction. Cette fonction se contente d'appeler la procédure stockée. Il renvoie le paramètre d'entrée P_SAL. En d'autres termes, si le salaire est valide (selon les règles), il sera renvoyé. Sinon, la fonction de re-lancer la procédure stockée est une exception.
La fonction doit retourner une valeur à laquelle nous voulons insérer dans notre tableau. Il ne peut pas revenir certains sens de la phrase comme "salaire correct". Aussi, si nous voulons valider deux colonnes, nous avons besoin d'une fonction distincte pour chacun, même si il y a une relation entre eux et nous utilisons la même procédure stockée pour valider à la fois. Un bon usage de la DÉTERMINISTE mot-clé.
Voici le test: les plombiers ne peut pas gagner 5000 spondulicks ....
... mais les gestionnaires peuvent (parce qu'ils le méritent):
Noter que le précipité exception est crucial pour ce travail. Nous ne pouvons pas écrire un peu bizarre SI le SALAIRE EST VALIDE ENSUITE INSÉRER de la logique dans notre instruction SQL. Donc, si la procédure stockée ne soulève pas une exception, mais plutôt que certains retours wimpy erreur d'état de l'emballage de la fonction aura à interpréter les résultats et de lancer sa propre exception.
Vous ne pouvez pas utiliser les procédures stockées dans l'instruction SELECT.
Vous pouvez utiliser des fonctions pour que.
Que je comprends que vous appelez insérer dans votre SP, afin de prendre en considération le fait que vous pouvez l'utiliser INSÉRER/mettre à JOUR dans le corps de la fonction. Mais si vous avez besoin de faire quelques vérifications, vous pouvez utiliser la fonction qui va faire des vérifications et de l'utilisation de cette fonction dans votre instruction select.