PL / SQL est un langage procédural puissant développé par Oracle pour créer des applications de base de données robustes. Voici comment vous pouvez l'utiliser pour rédiger des procédures, des fonctions et des déclencheurs stockés:
Procédures stockées:
Les procédures stockées sont des sous-programmes stockés dans la base de données qui peuvent être appelés par des applications. Pour créer une procédure stockée, utilisez l'instruction CREATE PROCEDURE
. Voici un exemple:
<code class="sql">CREATE OR REPLACE PROCEDURE greet_user(p_user_name IN VARCHAR2) AS BEGIN DBMS_OUTPUT.PUT_LINE('Hello, ' || p_user_name); END; /</code>
Vous pouvez appeler cette procédure à l'aide de l'énoncé CALL
:
<code class="sql">CALL greet_user('John');</code>
Fonctions:
Les fonctions sont similaires aux procédures mais renvoient une valeur. Vous créez des fonctions à l'aide de l'instruction CREATE FUNCTION
. Voici un exemple:
<code class="sql">CREATE OR REPLACE FUNCTION calculate_total(p_price IN NUMBER, p_quantity IN NUMBER) RETURN NUMBER AS v_total NUMBER; BEGIN v_total := p_price * p_quantity; RETURN v_total; END; /</code>
Vous pouvez appeler cette fonction dans une requête SQL ou dans un autre bloc PL / SQL:
<code class="sql">SELECT calculate_total(10.50, 5) AS total FROM DUAL;</code>
Déclencheurs:
Les déclencheurs sont des types spéciaux de procédures stockées qui s'exécutent automatiquement en réponse à certains événements sur une table ou une vue particulière. Pour créer un déclencheur, utilisez l'instruction CREATE TRIGGER
. Par exemple, un déclencheur qui se connecte à une table d'employés:
<code class="sql">CREATE OR REPLACE TRIGGER log_emp_update AFTER UPDATE ON employees FOR EACH ROW BEGIN INSERT INTO emp_log (emp_id, operation, old_salary, new_salary) VALUES (:OLD.employee_id, 'UPDATE', :OLD.salary, :NEW.salary); END; /</code>
Ce déclencheur enregistre les mises à jour du salaire d'une table emp_log
.
L'optimisation des procédures stockées PL / SQL est cruciale pour améliorer les performances. Voici quelques meilleures pratiques:
Utilisez des opérations en vrac:
Les opérations en vrac peuvent réduire considérablement les commutateurs de contexte entre SQL et PL / SQL, améliorant les performances. Utilisez une FORALL
BULK COLLECT
et pour de meilleures performances dans la manipulation des données:
<code class="sql">DECLARE TYPE emp_tab IS TABLE OF employees%ROWTYPE; l_employees emp_tab; BEGIN SELECT * BULK COLLECT INTO l_employees FROM employees WHERE department_id = 10; FORALL i IN 1..l_employees.COUNT UPDATE employees SET salary = salary * 1.1 WHERE employee_id = l_employees(i).employee_id; END; /</code>
FORALL
opérations DML et évitez les boucles PL / SQL inutiles qui peuvent être effectuées dans SQL.Les fonctions et les procédures en PL / SQL servent des fins similaires mais ont des différences distinctes:
Valeur de retour:
RETURN
indiquant le type de données de la valeur retournée.OUT
paramètres pour ramener les valeurs à l'environnement d'appel.Contexte d'utilisation:
Syntaxe:
CREATE FUNCTION
avec une clause RETURN
.CREATE PROCEDURE
et ne nécessitent pas de clause RETURN
.Gestion des paramètres:
IN
) et renvoient une seule valeur de sortie. Ils peuvent également avoir des paramètres IN OUT
.IN
, OUT
et IN OUT
, permettant un échange de données plus complexe entre la procédure et l'environnement d'appel.Les déclencheurs PL / SQL de débogage peuvent être difficiles, mais voici quelques méthodes efficaces:
DBMS_Output:
Utilisez DBMS_OUTPUT
pour imprimer des messages de débogage dans votre code de déclenchement. Cela peut vous aider à suivre l'écoulement et les valeurs pendant l'exécution du déclencheur:
<code class="sql">CREATE OR REPLACE TRIGGER debug_trigger BEFORE INSERT ON employees FOR EACH ROW BEGIN DBMS_OUTPUT.PUT_LINE('Trigger fired for employee: ' || :NEW.employee_id); END; /</code>
Pour voir la sortie, assurez-vous que DBMS_OUTPUT
est activé dans votre session:
<code class="sql">SET SERVEROUTPUT ON;</code>
Outils de débogage:
Utilisez des outils de débogage intégrés d'Oracle, tels que Oracle SQL Developer. Ces outils vous permettent de définir des points d'arrêt, de parcourir le code et d'inspecter les variables:
Enregistrement:
Implémentez un mécanisme de journalisation dans votre déclencheur. JOGEZ INFORMATION INFORMATIQUE À UNE TABLE DE DEBUG SÉSIMÉDÉE:
<code class="sql">CREATE TABLE trigger_debug_log ( id NUMBER PRIMARY KEY, trigger_name VARCHAR2(100), log_time TIMESTAMP, message VARCHAR2(4000) ); CREATE SEQUENCE trigger_debug_seq; CREATE OR REPLACE TRIGGER debug_trigger_with_logging BEFORE INSERT ON employees FOR EACH ROW BEGIN INSERT INTO trigger_debug_log (id, trigger_name, log_time, message) VALUES (trigger_debug_seq.NEXTVAL, 'debug_trigger_with_logging', SYSTIMESTAMP, 'Employee ID: ' || :NEW.employee_id); END; /</code>
Gestion des exceptions:
Utilisez la gestion des exceptions pour attraper des erreurs et les enregistrer pour une inspection ultérieure:
<code class="sql">CREATE OR REPLACE TRIGGER error_handling_trigger BEFORE INSERT ON employees FOR EACH ROW BEGIN -- Trigger logic IF :NEW.salary </code>
En combinant ces méthodes, vous pouvez effectivement déboguer et maintenir vos déclencheurs PL / SQL dans les bases de données Oracle.
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!