I denne tutorial giver jeg 4 PL/SQL anonyme blokeksempler, så du kan lære, hvordan du opretter og bruger anonyme blokke i Oracle-databasen. Anonyme blokke i PL/SQL er de programmer, der ikke har nogen Create Procedure eller Create Function-sætning, og den gemmer ikke i Oracle-databasen. PL/SQL anonyme blokke bruges mest til at teste eller til at køre programmet i Oracle-databasen kun én gang.
1. PL/SQL anonym blok til at udskrive numre i omvendt rækkefølge
Følgende PL/SQL-program vil udskrive tallene 0 til 10 i omvendt rækkefølge, ved at bruge REVERSE-sætning i for loop.
SET SERVEROUTPUT ON; DECLARE counter NUMBER; BEGIN FOR counter IN REVERSE 0..10 LOOP DBMS_OUTPUT.PUT_LINE (counter); END LOOP; END; /
Output
10 9 8 7 6 5 4 3 2 1 0 PL/SQL procedure successfully completed.
2. Udskriv medarbejdere tæller i en afdeling
Følgende PL/SQL-program tæller medarbejderne i afdeling 90. Tabellen er fra HR-skemaet i Oracle-databasen. Du kan downloade dette skema fra følgende link Download HR Schema.
SET SERVEROUTPUT ON; DECLARE emp_count NUMBER; v_department_id NUMBER := 90; BEGIN SELECT COUNT ( * ) INTO emp_count FROM employees WHERE department_id = v_department_id; DBMS_OUTPUT.PUT_LINE( 'The employee count is: ' || emp_count || ' for the department with an ID of: ' || v_department_id); END; /
Output
The employee count is: 3 for the department with an ID of: 90 PL/SQL procedure successfully completed.
3. Tag input i PL/SQL anonym blok og udskriv
I eksemplet nedenfor vil den bede om input fra brugeren til afdelings-id og vil udskrive medarbejderantal i den pågældende afdeling, og vil også udskrive afdelingsnavnet.
SET SERVEROUTPUT ON; DECLARE dept_id_var NUMBER (4) := &department_id; dept_name VARCHAR2 (30); emp_count NUMBER; BEGIN SELECT COUNT ( * ) INTO emp_count FROM employees WHERE department_id = dept_id_var; SELECT department_name INTO dept_name FROM departments WHERE department_id = dept_id_var; DBMS_OUTPUT.PUT_LINE( 'There are ' || emp_count || ' employees ' || 'in the ' || dept_name || ' department.'); END; /
Output
Enter value for department_id: 60 old 2: dept_id_var NUMBER(4) := &department_id; new 2: dept_id_var NUMBER(4) := 60; There are 4 employees in the IT department. PL/SQL procedure successfully completed.
4. PL/SQL-blok med <> Eksempel
Den følgende PL/SQL-blok bruger etiketterne for overordnet og underordnet blok. Den underordnede blok vil få adgang til den overordnede bloks variabel ved at bruge etiketreferencen for den overordnede blok. Programmet vil opdatere det gamle leder-id med nyt leder-id for afdelingerne.
SET SERVEROUTPUT ON; <<outer_block>> DECLARE mgr_id NUMBER (6) := '¤t_manager_id'; dept_count NUMBER := 0; BEGIN SELECT COUNT ( * ) INTO dept_count FROM departments WHERE manager_id = outer_block.mgr_id; IF dept_count > 0 THEN <<inner_block>> DECLARE dept_name VARCHAR2 (30); mgr_id NUMBER (6) := '&new_manager_id'; BEGIN SELECT department_name INTO dept_name FROM departments WHERE manager_id = outer_block.mgr_id; UPDATE departments SET manager_id = inner_block.mgr_id WHERE manager_id = outer_block.mgr_id; DBMS_OUTPUT.PUT_LINE ( 'Department manager ID has been changed for ' || dept_name); END inner_block; ELSE DBMS_OUTPUT.PUT_LINE ( 'There are no departments listed for the manager'); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE ( 'There are no departments listed for the manager'); END outer_block; /
Output
Enter value for current_manager_id: 100 old 3: mgr_id NUMBER (6) := '¤t_manager_id'; new 3: mgr_id NUMBER (6) := '100'; Enter value for new_manager_id: 201 old 16: mgr_id NUMBER (6) := '&new_manager_id'; new 16: mgr_id NUMBER (6) := '201'; Department manager ID has been changed for Executive PL/SQL procedure successfully completed.
-
*ADVARSEL* Windows-opdatering bryder rene Access-applikationer – rettelse tilgængelig
-
Er kolonne- og tabelnavne følsomme for store og små bogstaver i MySQL?
-
SQL Server sp_msforeachtable brug til kun at vælge de tabeller, der opfylder en eller anden betingelse
-
Tegn på, at din database ikke længere fungerer for dig