BEGIN
NULL;
END;
Zmienne
declare
variable_name [constant] DATATYPE [DEFAULT value |DEFAULT NULL];
DECLARE
v1_nr,v2_nr NUMBER; -- ŹLE
DECLARE
v1_nr NUMBER; -- DOBRZE
v2_nr NUMBER; -- DOBRZE
DECLARE
v_sal_nr NUMBER;
v_name_tx VARCHAR2 (10) DEFAULT 'KING';
v_start_dt DATE := SYSDATE; -- TO SAMO CO: DEFAULT SYSDATE
DECLARE
variable_name table.column%TYPE;
variable_name2 variable_name%TYPE;
variable_row table%ROWTYPE;
PL/SQL Subtypes
SUBTYPE subtype_name IS base_type[(constraint)] [NOT NULL];
SUBTYPE CHARACTER IS CHAR;
SUBTYPE INTEGER IS NUMBER(38,0); -- allows only whole numbers
PL/SQLType
DECLARE
TYPE commissions IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
comm_tab commissions;
BEGIN
comm_tab(5) := 20000 * 0.15;
Instrukcje warunkowe:
Instrukcja warunkowa uruchamia fragment kodu w zależności od sprawdzenia równości, porówniania, lub sprawdzenia poprawności warunku (TRUE)
PL/SQL posiada 3 inttrukcje:
IF-THEN
IF-THEN-ELSE
IF-THEN-ELSIF-THEN-...-ELSE.
1.
Konstrukcja IF-THEN uruchamia kod jeśli warunek jest TRUE.
IF line_count > lines_per_page THEN
line_count := 0;
DBMS_SQL.put_line ('--------');
END IF;
2.
Konstrukcja IF-THEN-ELSE posiada dwa bloki kodu. Jeśli pierwszy warunek jest TRUE, to wykonywany jest pierwszy blok; jeśli nie to drugi:
IF items_sold > get_employee_target (emp_id) THEN
over_quota_count := over_quota_count + 1;
give_raise (emp_id);
ELSE
give_talking_to (emp_id);
END IF;
3.
IF is_number (current_char)
OR is_letter (current_char) THEN
new_char := current_char;
ELSIF current_char = ' ' THEN
new_char := '+';
ELSE
new_char := convert_to_hex (current_char);
END IF;
Konstrukcja CASE
Konstrukcja CASE sprawdza sekwencyjnie warunki i uruchamia kod związany - wybierany jest pierwszy który zwróci TRUE.
SET SERVEROUTPUT ON;
DECLARE
grade CHAR (1);
BEGIN
grade := 'B';
CASE grade
WHEN 'A' THEN
DBMS_OUTPUT.put_line ('Excellent');
WHEN 'B' THEN
DBMS_OUTPUT.put_line ('Very Good');
WHEN 'C' THEN
DBMS_OUTPUT.put_line ('Good');
WHEN 'D' THEN
DBMS_OUTPUT.put_line ('Fair');
WHEN 'F' THEN
DBMS_OUTPUT.put_line ('Poor');
ELSE
DBMS_OUTPUT.put_line ('No such grade');
END CASE;
END;
DECLARE
grade NUMBER;
BEGIN
grade := 5;
CASE
WHEN grade = 5 THEN
DBMS_OUTPUT.put_line ('=5');
WHEN (grade > 1) THEN
DBMS_OUTPUT.put_line ('>1');
ELSE
DBMS_OUTPUT.put_line ('???');
END CASE;
END;
Pętle
LOOP
COUNT := COUNT + 1;
IF COUNT > 10 THEN
EXIT;
END IF;
END LOOP;
LOOP
COUNT := COUNT + 1;
EXIT WHEN COUNT > 10;
END LOOP;
WHILE (COUNT <= 10) LOOP
COUNT := COUNT + 1;
END LOOP;
FOR month_index IN 1 .. 12 LOOP
process_month_sales (month_index);
END LOOP;