La création et l'utilisation de procédures et de fonctions stockées dans PL / SQL implique plusieurs étapes de clé. Tout d'abord, vous devez comprendre la syntaxe de base. Les procédures stockées sont des blocs de code PL / SQL qui effectuent une tâche spécifique, impliquant souvent plusieurs instructions SQL. Ils ne renvoient pas directement une valeur. Les fonctions, en revanche, sont similaires mais renvoient toujours une seule valeur.
Création d'une procédure stockée:
<code class="sql">CREATE OR REPLACE PROCEDURE my_procedure (param1 IN NUMBER, param2 OUT VARCHAR2) AS variable1 NUMBER := 0; BEGIN -- Your PL/SQL code here SELECT COUNT(*) INTO variable1 FROM my_table WHERE column1 = param1; param2 := 'Record count: ' || variable1; EXCEPTION WHEN OTHERS THEN param2 := 'Error occurred'; END; /</code>
Cet exemple montre une procédure my_procedure
qui prend un nombre en entrée ( param1
) et renvoie un message de chaîne via un paramètre de sortie ( param2
). Le /
à la fin est une partie cruciale de la syntaxe dans SQL * Plus ou SQL Developer pour exécuter la commande.
Création d'une fonction:
<code class="sql">CREATE OR REPLACE FUNCTION my_function (param1 IN NUMBER) RETURN NUMBER AS variable1 NUMBER := 0; BEGIN SELECT SUM(column2) INTO variable1 FROM my_table WHERE column1 = param1; RETURN variable1; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN 0; END; /</code>
Cette fonction my_function
prend un nombre en entrée et renvoie la somme d'une colonne à partir d'une table. Notez l'instruction RETURN
, essentielle pour les fonctions. Le bloc EXCEPTION
gère le cas où aucune donnée n'est trouvée.
Utilisation de procédures et de fonctions stockées:
Les procédures stockées sont appelées en utilisant l'instruction EXECUTE
ou dans d'autres blocs PL / SQL:
<code class="sql">EXECUTE my_procedure(10, :output_variable); DBMS_OUTPUT.PUT_LINE(:output_variable);</code>
Les fonctions peuvent être appelées directement dans les instructions SQL ou les blocs PL / SQL:
<code class="sql">SELECT my_function(20) FROM dual; SELECT column1, my_function(column1) FROM my_table;</code>
L'optimisation de PL / SQL pour les performances implique plusieurs stratégies axées sur les pratiques de codage SQL et PL / SQL efficaces.
FORALL
plutôt que des instructions INSERT
individuelles ou UPDATE
dans des boucles.FORALL
pour les opérations DML en vrac. Cela réduit considérablement les frais généraux des commutateurs de contexte répétés.WHERE
les clauses pour filtrer efficacement les données. Évitez d'utiliser SELECT *
et spécifiez uniquement les colonnes nécessaires.SELECT INTO
) au lieu de curseurs explicites. Si vous devez utiliser les curseurs, envisagez d'utiliser des curseurs implicites le cas échéant ou d'optimiser la récupération du curseur. La gestion des erreurs est cruciale pour le code PL / SQL robuste. Le bloc EXCEPTION
vous permet de gérer gracieusement les erreurs sans écraser toute l'application.
<code class="sql">BEGIN -- Your PL/SQL code here EXCEPTION WHEN NO_DATA_FOUND THEN -- Handle NO_DATA_FOUND exception DBMS_OUTPUT.PUT_LINE('No data found.'); WHEN OTHERS THEN -- Handle other exceptions DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM); -- Log the error for later analysis END;</code>
Cet exemple démontre un bloc EXCEPTION
de base. La clause WHEN OTHERS
attrape toutes les exceptions non perdues. SQLERRM
fournit le message d'erreur. Il est essentiel de enregistrer les erreurs à des fins de débogage et de surveillance. La gestion des exceptions plus spécifique est préférable à un général WHEN OTHERS
bloquent pour fournir des messages d'erreur plus informatifs et faciliter un meilleur débogage. Envisagez d'utiliser des exceptions personnalisées pour des erreurs d'application spécifiques.
La principale différence réside dans leurs valeurs de retour:
Quand utiliser les procédures stockées:
Quand utiliser les fonctions:
Essentiellement, utilisez des procédures pour les actions et les fonctions pour les calculs et la récupération des données. Le choix dépend de la tâche spécifique que vous devez accomplir. Si vous devez renvoyer une seule valeur, une fonction est le meilleur choix. Si vous effectuez une série d'actions sans une seule valeur de retour, une procédure est plus appropriée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!