0x01 graphic

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:

  1. IF-THEN

  2. IF-THEN-ELSE

  3. 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;

  1. 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;

0x01 graphic
0x01 graphic
0x01 graphic