Commit 819bc3ca authored by O'Reilly Media, Inc.'s avatar O'Reilly Media, Inc.
Browse files

Initial commit

parents
Loading
Loading
Loading
Loading
+91 −0
Changes for Learning Oracle PL:SQL - Working Files/Chapter 1/blockstructure.sql: 91 added lines, 0 removed lines.
Original line number Diff line number Diff line
BEGIN
  -- simplest block of SQL
  NULL;
END;

DECLARE
  v_variable NUMBER;
BEGIN
  -- simple code block with 1 variable
  v_variable := 1;
  DBMS_OUTPUT.PUT_LINE('v_variable = ' || v_variable);
END;

BEGIN
  -- embedded blocks
  DBMS_OUTPUT.PUT_LINE('First Block');
  BEGIN
    DBMS_OUTPUT.PUT_LINE('Second Block');
  END;
END;

DECLARE
  -- embedded block and variables
  v_outer_variable NUMBER := 1;
BEGIN
  DECLARE
    v_inner_variable NUMBER := 2;
  BEGIN
    DBMS_OUTPUT.PUT_LINE(v_outer_variable || ' ' ||
                         v_inner_variable);
  END;
END;

DECLARE
  -- embedded block and duplicate variable names
  v_outer_variable NUMBER := 1;
BEGIN
  DECLARE
    v_outer_variable NUMBER := 2;
  BEGIN
    DBMS_OUTPUT.PUT_LINE(v_outer_variable);
  END;
  DBMS_OUTPUT.PUT_LINE(v_outer_variable);
END;

DECLARE
  -- embedded block and variables
  v_outer_variable NUMBER := 1;
BEGIN
  DECLARE
    v_inner_variable NUMBER := 2;
  BEGIN
    DBMS_OUTPUT.PUT_LINE(v_outer_variable || ' ' ||
                         v_inner_variable);
  END;
  -- fails because v_inner_variable is out of scope
  DBMS_OUTPUT.PUT_LINE(v_outer_variable || ' ' ||
                       v_inner_variable);
END;

CREATE OR REPLACE PROCEDURE abc AS
  -- block structure within a procedure
BEGIN
  DBMS_OUTPUT.PUT_LINE('Hello');
END;
/

BEGIN
  -- block structure when calling a procedure
  abc;
END;

DROP PROCEDURE def;

CREATE PROCEDURE def AS
  -- end labels
  PROCEDURE ghi IS
  BEGIN
    NULL;
  END ghi;
BEGIN
  NULL;
END def;

BEGIN
  -- label defined in code
  <<label_one>>
  BEGIN
    NULL;
  END label_one;
END;
+82 −0
Changes for Learning Oracle PL:SQL - Working Files/Chapter 1/control.sql: 82 added lines, 0 removed lines.
Original line number Diff line number Diff line
BEGIN
  DBMS_OUTPUT.PUT_LINE('Simple IF THEN END IF');
  IF TRUE THEN
    DBMS_OUTPUT.PUT_LINE('TRUE');
  END IF;
  DBMS_OUTPUT.PUT_LINE('IF THEN ELSE END IF');  
  IF TRUE THEN
    DBMS_OUTPUT.PUT_LINE('TRUE');
  ELSE
    DBMS_OUTPUT.PUT_LINE('FALSE');
  END IF;
  DBMS_OUTPUT.PUT_LINE('IF THEN ELSIF ELSE END IF');  
  IF TRUE THEN
    DBMS_OUTPUT.PUT_LINE('TRUE');
  ELSIF TRUE = FALSE THEN
       DBMS_OUTPUT.PUT_LINE('TRUE AND FALSE');
  ELSE
    DBMS_OUTPUT.PUT_LINE('FALSE');
  END IF;
END;

DECLARE
  v_value NUMBER := '1';
BEGIN
  CASE v_value
  WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('Its 1');
  WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('Its 2');
  WHEN 3 THEN DBMS_OUTPUT.PUT_LINE('Its 3');
  ELSE DBMS_OUTPUT.PUT_LINE('What is it?');
  END CASE;
END;

DECLARE
  v_value NUMBER := '1';
BEGIN
  CASE
  WHEN v_value = 1 THEN DBMS_OUTPUT.PUT_LINE('Its 1');
  WHEN v_value = 2 THEN DBMS_OUTPUT.PUT_LINE('Its 2');
  WHEN v_value = 3 THEN DBMS_OUTPUT.PUT_LINE('Its 3');
  ELSE DBMS_OUTPUT.PUT_LINE('What is it?');
  END CASE;
END;

BEGIN
  DBMS_OUTPUT.PUT_LINE('1');
  GOTO THIRD;
  DBMS_OUTPUT.PUT_LINE('2');
  <<THIRD>>
  DBMS_OUTPUT.PUT_LINE('3');  
END;

DECLARE
  v_variable NUMBER := 1;
BEGIN
  <<FAKE_LOOP>>
  DBMS_OUTPUT.PUT_LINE(v_variable);
  v_variable := v_variable + 1;
  IF v_variable < 3 THEN GOTO FAKE_LOOP; END IF;
END;

BEGIN
  IF TRUE THEN
    GOTO else_statement;
  ELSE
    <<else_statement>>
    NULL;
  END IF;
END;

DECLARE
  v_number NUMBER := 1;
  PROCEDURE sub_proc IS
  BEGIN
    NULL;
    <<LABEL_ONE>>
    NULL;
  END;
BEGIN
  v_number := 1;
  GOTO LABEL_ONE;
  sub_proc;
END;
+14 −0
Changes for Learning Oracle PL:SQL - Working Files/Chapter 1/cursor loops.sql: 14 added lines, 0 removed lines.
Original line number Diff line number Diff line
DECLARE
  CURSOR v_curs IS 
  SELECT *
    FROM animal;
  v_animal v_curs%ROWTYPE;
BEGIN
  OPEN v_curs;
  LOOP
    FETCH v_curs INTO v_animal;
    EXIT WHEN v_curs%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(v_animal.animal_id || ' ' || v_animal.animal_name);
  END LOOP;
  CLOSE v_curs;
END;
 No newline at end of file
+231 −0
Changes for Learning Oracle PL:SQL - Working Files/Chapter 1/index by.sql: 231 added lines, 0 removed lines.
Original line number Diff line number Diff line
DECLARE

  -- index-by type and variable
  TYPE v_index_by_t IS TABLE OF VARCHAR2(30)
    INDEX BY BINARY_INTEGER;
  v_ib v_index_by_t;
  
  -- table type and variable
  TYPE v_table_t IS TABLE OF VARCHAR2(20);
  v_table v_table_t := v_table_t();
  
  -- varray type and variable
  TYPE v_varray_t IS VARRAY(4) OF VARCHAR2(20);
  v_varray v_varray_t := v_varray_t();
  
BEGIN

  DBMS_OUTPUT.PUT_LINE('...when Empty...');
  DBMS_OUTPUT.PUT_LINE('Index By Count ' || v_ib.COUNT);
  DBMS_OUTPUT.PUT_LINE('Table Count    ' || v_table.COUNT);
  DBMS_OUTPUT.PUT_LINE('VARRAY Count   ' || v_varray.COUNT);

  DBMS_OUTPUT.PUT_LINE('Index By First ' || v_ib.FIRST);
  DBMS_OUTPUT.PUT_LINE('Table First    ' || v_table.FIRST);
  DBMS_OUTPUT.PUT_LINE('VARRAY First   ' || v_varray.FIRST);

  DBMS_OUTPUT.PUT_LINE('Index By Last  ' || v_ib.LAST);
  DBMS_OUTPUT.PUT_LINE('Table Last     ' || v_table.LAST);
  DBMS_OUTPUT.PUT_LINE('VARRAY Last    ' || v_varray.LAST);
  
END;

DECLARE

  -- index-by type and variable
  TYPE v_index_by_t IS TABLE OF VARCHAR2(30)
    INDEX BY BINARY_INTEGER;
  v_ib v_index_by_t;
  
BEGIN

  -- add 3 entries
  v_ib(1) := 'A';
  v_ib(2) := 'B';
  v_ib(3) := 'C';
  
  DBMS_OUTPUT.PUT_LINE('...when 3 entries added...');
  DBMS_OUTPUT.PUT_LINE('Index By Count ' || v_ib.COUNT);
  DBMS_OUTPUT.PUT_LINE('Index By First ' || v_ib.FIRST);
  DBMS_OUTPUT.PUT_LINE('Index By Last  ' || v_ib.LAST);

  DBMS_OUTPUT.PUT_LINE('...simple for loop..');
  FOR counter IN 1..v_ib.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(counter || ' ' || v_ib(counter));
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('...first and next..');
  DECLARE
    v_counter BINARY_INTEGER;
  BEGIN
    v_counter := v_ib.FIRST;
    LOOP
      EXIT WHEN v_counter IS NULL;
      DBMS_OUTPUT.PUT_LINE(v_counter || ' ' || v_ib(v_counter));
      v_counter := v_ib.NEXT(v_counter);
    END LOOP;
  END;

  DBMS_OUTPUT.PUT_LINE('...last and prior..');
  DECLARE
    v_counter BINARY_INTEGER;
  BEGIN
    v_counter := v_ib.LAST;
    LOOP
      EXIT WHEN v_counter IS NULL;
      DBMS_OUTPUT.PUT_LINE(v_counter || ' ' || v_ib(v_counter));
      v_counter := v_ib.PRIOR(v_counter);
    END LOOP;
  END;
 
END;

DECLARE

  -- table type and variable
  TYPE v_table_t IS TABLE OF VARCHAR2(30);
  v_table v_table_t := v_table_t();
  
BEGIN

  -- add 3 entries
  v_table.EXTEND(3);    
  v_table(1) := 'A';
  v_table(2) := 'B';
  v_table(3) := 'C';
  
  DBMS_OUTPUT.PUT_LINE('...when 3 entries added...');
  DBMS_OUTPUT.PUT_LINE('Table Count ' || v_table.COUNT);
  DBMS_OUTPUT.PUT_LINE('Table First ' || v_table.FIRST);
  DBMS_OUTPUT.PUT_LINE('Table Last  ' || v_table.LAST);

  DBMS_OUTPUT.PUT_LINE('...simple for loop..');
  FOR counter IN 1..v_table.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(counter || ' ' || v_table(counter));
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('...first and next..');
  DECLARE
    v_counter BINARY_INTEGER;
  BEGIN
    v_counter := v_table.FIRST;
    LOOP
      EXIT WHEN v_counter IS NULL;
      DBMS_OUTPUT.PUT_LINE(v_counter || ' ' || v_table(v_counter));
      v_counter := v_table.NEXT(v_counter);
    END LOOP;
  END;

  DBMS_OUTPUT.PUT_LINE('...last and prior..');
  DECLARE
    v_counter BINARY_INTEGER;
  BEGIN
    v_counter := v_table.LAST;
    LOOP
      EXIT WHEN v_counter IS NULL;
      DBMS_OUTPUT.PUT_LINE(v_counter || ' ' || v_table(v_counter));
      v_counter := v_table.PRIOR(v_counter);
    END LOOP;
  END;
 
END;

DECLARE

  -- table type and variable
  TYPE v_varray_t IS TABLE OF VARCHAR2(30);
  v_varray v_varray_t := v_varray_t();
  
BEGIN

  -- add 3 entries
  v_varray.EXTEND(3);    
  v_varray(1) := 'A';
  v_varray(2) := 'B';
  v_varray(3) := 'C';
  
  DBMS_OUTPUT.PUT_LINE('...when 3 entries added...');
  DBMS_OUTPUT.PUT_LINE('Table Count ' || v_varray.COUNT);
  DBMS_OUTPUT.PUT_LINE('Table First ' || v_varray.FIRST);
  DBMS_OUTPUT.PUT_LINE('Table Last  ' || v_varray.LAST);

  DBMS_OUTPUT.PUT_LINE('...simple for loop..');
  FOR counter IN 1..v_varray.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(counter || ' ' || v_varray(counter));
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('...first and next..');
  DECLARE
    v_counter BINARY_INTEGER;
  BEGIN
    v_counter := v_varray.FIRST;
    LOOP
      EXIT WHEN v_counter IS NULL;
      DBMS_OUTPUT.PUT_LINE(v_counter || ' ' || v_varray(v_counter));
      v_counter := v_varray.NEXT(v_counter);
    END LOOP;
  END;

  DBMS_OUTPUT.PUT_LINE('...last and prior..');
  DECLARE
    v_counter BINARY_INTEGER;
  BEGIN
    v_counter := v_varray.LAST;
    LOOP
      EXIT WHEN v_counter IS NULL;
      DBMS_OUTPUT.PUT_LINE(v_counter || ' ' || v_varray(v_counter));
      v_counter := v_varray.PRIOR(v_counter);
    END LOOP;
  END;
 
END;

DECLARE

  -- table type and variable
  TYPE v_varray_t IS VARRAY(3) OF VARCHAR2(30);
  v_varray v_varray_t := v_varray_t();
  
BEGIN

  -- add 3 entries
  v_varray.EXTEND(3);    
  v_varray(1) := 'A';
  v_varray(2) := 'B';
  v_varray(3) := 'C';
  
  DBMS_OUTPUT.PUT_LINE('...when 3 entries added...');
  DBMS_OUTPUT.PUT_LINE('Table Count ' || v_varray.COUNT);
  DBMS_OUTPUT.PUT_LINE('Table First ' || v_varray.FIRST);
  DBMS_OUTPUT.PUT_LINE('Table Last  ' || v_varray.LAST);

  DBMS_OUTPUT.PUT_LINE('...simple for loop..');
  FOR counter IN 1..v_varray.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(counter || ' ' || v_varray(counter));
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('...first and next..');
  DECLARE
    v_counter BINARY_INTEGER;
  BEGIN
    v_counter := v_varray.FIRST;
    LOOP
      EXIT WHEN v_counter IS NULL;
      DBMS_OUTPUT.PUT_LINE(v_counter || ' ' || v_varray(v_counter));
      v_counter := v_varray.NEXT(v_counter);
    END LOOP;
  END;

  DBMS_OUTPUT.PUT_LINE('...last and prior..');
  DECLARE
    v_counter BINARY_INTEGER;
  BEGIN
    v_counter := v_varray.LAST;
    LOOP
      EXIT WHEN v_counter IS NULL;
      DBMS_OUTPUT.PUT_LINE(v_counter || ' ' || v_varray(v_counter));
      v_counter := v_varray.PRIOR(v_counter);
    END LOOP;
  END;
 
END;
+60 −0
Changes for Learning Oracle PL:SQL - Working Files/Chapter 1/loops.sql: 60 added lines, 0 removed lines.
Original line number Diff line number Diff line
BEGIN

  DBMS_OUTPUT.PUT_LINE('Simple for loop');
  FOR counter IN 1..3 LOOP
    DBMS_OUTPUT.PUT_LINE(counter);
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('Simple reverse for loop');
  FOR counter IN REVERSE 1..3 LOOP
    DBMS_OUTPUT.PUT_LINE(counter);
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('Simple for loop with exit');
  FOR counter IN 1..3 LOOP
    DBMS_OUTPUT.PUT_LINE(counter);
    EXIT;
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('Simple for loop with conditional exit');
  FOR counter IN 1..3 LOOP
    DBMS_OUTPUT.PUT_LINE(counter);
    EXIT WHEN counter = 2;
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('Simple for loop with continue');
  FOR counter IN 1..3 LOOP
    CONTINUE;
    DBMS_OUTPUT.PUT_LINE(counter);
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('Simple for loop with conditional continue');
  FOR counter IN 1..3 LOOP
    CONTINUE WHEN counter = 2;
    DBMS_OUTPUT.PUT_LINE(counter);
  END LOOP;

END;
/

DECLARE
  v_stop_now BOOLEAN;
BEGIN

  v_stop_now := FALSE;
  LOOP
    DBMS_OUTPUT.PUT_LINE('Simple Loop 1');
    v_stop_now := TRUE;
    EXIT WHEN v_stop_now;
    DBMS_OUTPUT.PUT_LINE('Simple Loop 2');
  END LOOP;

  v_stop_now := FALSE;
  WHILE NOT v_stop_now LOOP
    DBMS_OUTPUT.PUT_LINE('Simple While Loop 1');
    v_stop_now := TRUE;
    DBMS_OUTPUT.PUT_LINE('Simple While Loop 2');
  END LOOP;

END;
/
Loading