PL/SQL by Example / Anonymous Block and Branching

Anonymous Block

A PL/SQL program consists of anonymous and named blocks. Anonymous blocks are mainly used to separate logical parts of the program and to control exception handling.

DECLARE
  -- optional area for variable declaration
  -- single-line comment
  /* multi-line comment */
BEGIN
  -- mandatory execution section
EXCEPTION
  -- optional area for exception handling
END;

The following example demonstrates the simple declaration of a numeric variable, value assignment, a division operation, and catching a general exception with output to the console. Particularly noteworthy is the declaration, where the data type comes after the variable name, and the value assignment using :=.

DECLARE
  a NUMBER;
BEGIN
  a:=10;
  a:=a/0; -- the notation a/=0 cannot be used;
EXCEPTION
  WHEN OTHERS THEN
    dbms_output.put_line('Division by zero!');
END;

Individual blocks can be nested. Variables with the same name are only valid within their own block.

DECLARE
  a NUMBER:=1; -- assignment of the default value directly in the declaration part
BEGIN
  DECLARE
    a NUMBER:=2;
    b NUMBER:=3;
  BEGIN
    dbms_output.put_line(a); -- 2
    dbms_output.put_line(b); -- 3
  END;
  dbms_output.put_line(a); -- 1
  -- variable b does not exist in this block
END;

Branching

Program flow control in PL/SQL is implemented using the standard IF THEN ELSE construct. The = operator is used for comparison.

DECLARE
  a BOOLEAN:=FALSE; -- boolean data type
BEGIN
  IF (a=TRUE) THEN  -- can be written as IF (a)
    dbms_output.put_line('true');
  ELSIF (a=FALSE) THEN -- can be written as ELSIF (NOT a)
    dbms_output.put_line('false');
  ELSE
    dbms_output.put_line('null'); -- note, BOOLEAN can be NULL
  END IF;
END;

It is also possible, of course, to use the CASE statement.

DECLARE
  a BOOLEAN;
BEGIN
  CASE a
    WHEN TRUE THEN
      dbms_output.put_line('true');
    WHEN FALSE THEN
      dbms_output.put_line('false');
    ELSE -- neither condition is met
      dbms_output.put_line('null');
  END CASE;
END;

Leave a reply

Your email address will not be published. Required fields are marked *