Top Banner
Distributed Database Applications COSC 5050 Week One
41

Distributed Database Applications COSC 5050 Week One.

Jan 02, 2016

Download

Documents

Jordan Green
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Distributed Database Applications COSC 5050 Week One.

Distributed Database Applications

COSC 5050Week One

Page 2: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Outline

IntroductionCourse overviewOracle client environmentData dictionaryLanguage fundamentalsProgram control

Page 3: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Introduction

Oracle databasePL/SQL Accessing Oracle serverDatabase objectsDDL and DML statements

Page 4: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

PL/SQLMany Oracle applications are built using client-server architecture

The Oracle database resides on the server

PL/SQL is like any other programming languagePL/SQL is not a stand-alone programming languagePL/SQL is a part of the Oracle RDBMS

Page 5: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

PL/SQL

Highly structured, readable, accessible languageStandard and portable languageEmbedded languageHigh-performance, highly integrated database language

Page 6: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Advantages of PL/SQL

Page 7: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

SQL ExampleThe semicolon terminates CREATE, INSERT, SELECT, and DROP statements

CREATE TABLE STUDENT( FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(20));

INSERT INTO STUDENT VALUES (‘JOHN’, ‘LUCKY’);

SELECT FIRST_NAME, LAST_NAME FROM STUDENT;

DROP TABLE STUDENT;

Page 8: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

PL/SQL Example

Page 7, 8, 9, 39 examplesWhen Oracle reads a PL/SQL block, a semicolon marks the end of the individual statement within the blockIt is not a block terminator!The “/” executes the PL/SQL block

Page 9: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Integration with SQLDECLARE l_book_count INTEGER;BEGIN SELECT COUNT(*) INTO l_book_count FROM books WHERE author LIKE '%Feuerstein, Steven%';

DBMS_OUTPUT.PUT_LINE( 'Steven have written (or co-written) ' || l_book_count || ' books.');

UPDATE books SET author = REPLACE (author, 'Steven', 'Stephen') WHERE author LIKE '%Feuerstein, Steven%';END;

Page 10: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Control and Conditional Logic

CREATE OR REPLACE PROCEDURE pay_out_balance( account_id_in IN accounts.id%TYPE)IS l_balance_remaining NUMBER;BEGIN LOOP l_balance_remaining := account_balance (account_id_in);

IF l_balance_remaining < 1000 THEN EXIT; ELSE apply_balance ( accont_id_in, l_balance_remaining); END IF; END LOOP;END pay_out_balance;

Page 11: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

When Things Go WrongCREATE OR REPLACE PROCEDURE check_account(account_id_in IN accounts.id%TYPE)IS l_balance_remaining NUMBER; l_balance_below_minimum EXCEPTION; l_account_name accounts.name%TYPE;BEGIN SELECT name INTO l_account_name FROM accounts WHERE id = account_id_in; l_balance_remaining := account_balance (account_id_in); DBMS_OUTPUT.put_line ( 'Balance for ' || l_account_name || ' = ' || l_balance_remaining); IF l_balance_remaining < 1000 THEN RAISE l_balance_below_minimum; END IF;EXCEPTION WHEN NO_DATA_FOUND THEN log_error (...); WHEN l_balance_below_minimum THEN log_error (...); RAISE;END;

Page 12: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Creating a Stored ProgramCREATE OR REPLACE FUNCTION wordcount (str IN VARCHAR2) RETURN PLS_INTEGERAS words PLS_INTEGER := 0; len PLS_INTEGER := NVL(LENGTH(str),0); inside_a_word BOOLEAN;BEGIN FOR i IN 1..len + 1 LOOP IF ASCII(SUBSTR(str, i, 1)) < 33 OR i > len THEN IF inside_a_word THEN words := words + 1; inside_a_word := FALSE; END IF; ELSE inside_a_word := TRUE; END IF; END LOOP; RETURN words;END;

Page 13: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Executing, Showing, and Dropping a Stored Program

BEGIN DBMS_OUTPUT.PUT_LINE(

'There are ' || wordcount(CHR(9)) || ' words in a tab'); END;

SELECT * FROM USER_OBJECTS;

DESC wordcount

SELECT TEXT FROM USER_SOURCE WHERE NAME = 'WORDCOUNT';

DROP FUNCTION wordcount;

Page 14: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Access OracleOracle server (service and host name)

cronus, icarus.webster.edu

Oracle clientOracle 11g client downloadSQL*PlusSQL DeveloperApplication Express (APEX) Workspace

Your login and password

Page 15: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Oracle SQL*Plus

Page 16: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Oracle SQL Developer

Page 17: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Oracle APEX

Page 18: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Data Dictionary

USER_ALL_DBA_

select view_name from all_views where view_name like 'USER%';

Page 19: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Language FundamentalsPL/SQL block structure

ModularizationScope

Anonymous blocksNamed blocks

ProceduresFunctions

Scope and visibility

Page 20: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

PL/SQL Block StructureHeaderDeclaration sectionExecution sectionException sectionPROCEDURE get_happy (ename_in IN VARCHAR2)IS hiredata DATE;BEGIN hiredate := SYSDATE – 2; INSERT INTO employee (emp_name, hiredate) VALUES (ename_in, hiredate);EXCEPTION WHEN dup_val_in_index THEN DBMS_OUTPUT.PUT_LINE (‘Cannot insert.’);END;

Page 21: Distributed Database Applications COSC 5050 Week One.

Jiangping Wang

No headerBegin with either DECLARE or BEGINCannot be called

Webster University Distributed Database Applications

Anonymous Blocks

BEGIN DBMS_OUTPUT.PUT_LINE (SYSDATE);END;

DECLARE l_right_now DATE := SYSDATE;BEGIN DBMS_OUTPUT.PUT_LINE (l_right_now);END;

Page 22: Distributed Database Applications COSC 5050 Week One.

Jiangping Wang

ProceduresFunctions

Webster University Distributed Database Applications

Named Blocks

procedure Add_employee (ssn in varchar2, fname in varchar2, lname in varchar2, dept_num in number, code in number, sup_ssn in varchar2)

is begin

insert into employee values (ssn, fname, lname, dept_num, code, sup_ssn);

end; -- Add_employee

Page 23: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Named Blocksfunction get_department(ssn_in in employee.ssn%type) return department.dept_name%typeis l_dept_name department.dept_name%type;begin select dept_name into l_dept_name from department inner join employee on employee.dept_num = department.dept_num where ssn = ssn_in; dbms_output.put_line('department name: ' || l_dept_name); return l_dept_name;exception when no_data_found then dbms_output.put_line( 'no such employee or not in any department!'); return null;end;

Page 24: Distributed Database Applications COSC 5050 Week One.

Jiangping Wang

Named Blocks in DB2

Webster University Distributed Database Applications

CREATE PROCEDURE sum( IN p_a INTEGER, IN p_b INTEGER, OUT p_s INTEGER) LANGUAGE SQL BEGIN SET p_s = p_a + p_b; END;

CALL sum(100,200,?);

Page 25: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

Language FundamentalsPL/SQL character setCase-insensitive languageIdentifiers

Up to 30 characters in lengthMust start with a letterCan include $, _, and #Cannot contain spaces

PL/SQL keywordsComments

Single-line comments using “--”Multi-line comments using /* … */

Page 26: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

PL/SQL Character Set

Type Characters

Letters A-Z, a-z

Digits 0-9

Symbols ~ ! @ # $ % * ( ) _ - + = | : ; " ' < > , . ? / ^

Whitespace Tab, space, newline, carriage return

Page 27: Distributed Database Applications COSC 5050 Week One.

Jiangping WangDistributed Database Applications

Program ControlIF statementsCASELOOPWHILE loopCursor loop

Page 28: Distributed Database Applications COSC 5050 Week One.

Jiangping WangDistributed Database Applications

IF StatementIF salary > 40000THEN give_bonus (employee_id, 500);END IF;

IF salary <= 40000THEN give_bonus (employee_id, 0);ELSE give_bonus (employee_id, 500);END IF;

declare salary number := 40000;begin IF salary > 40000 THEN dbms_output.put_line('Salary is greater than 40000'); ELSE dbms_output.put_line('Salary is not greater than 40000'); END IF;end;/

Page 29: Distributed Database Applications COSC 5050 Week One.

Jiangping WangDistributed Database Applications

IF Statementdeclare salary number := &salary;begin IF salary BETWEEN 10000 AND 20000 THEN dbms_output.put_line('Give bonus 1500.'); ELSIF salary BETWEEN 20000 AND 40000 THEN dbms_output.put_line('Give bonus 1000.'); ELSIF salary > 40000 THEN dbms_output.put_line('Give bonus 500.'); ELSE dbms_output.put_line('Give bonus 0.'); END IF;end;/

Page 30: Distributed Database Applications COSC 5050 Week One.

Jiangping WangDistributed Database Applications

CASE Statement

declare salary_level number := &salary;begin case salary_level when 1 then dbms_output.put_line('give bonus 1500.'); when 2 then dbms_output.put_line('give bonus 1000.'); when 3 then dbms_output.put_line('give bonus 500.'); else dbms_output.put_line('give bonus 0.'); end case;end;/

Simple CASE statement

Page 31: Distributed Database Applications COSC 5050 Week One.

Jiangping Wang

Searched CASE statement

Distributed Database Applications

CASE Statement

declare salary number := &salary;begin case when salary between 10000 and 20000 then dbms_output.put_line('give bonus 1500.'); when salary between 20000 and 40000 then dbms_output.put_line('give bonus 1000.'); when salary > 40000 then dbms_output.put_line('give bonus 500.'); else dbms_output.put_line('give bonus 0.'); end case;end;/

Page 32: Distributed Database Applications COSC 5050 Week One.

Jiangping Wang

CASE expression

Distributed Database Applications

CASE Statement

declare salary number := &salary; bonus_amount number;begin bonus_amount := case when salary BETWEEN 10000 AND 20000 THEN 1500 when salary BETWEEN 20000 AND 40000 THEN 1000 when salary > 40000 THEN 500 else 0 end; dbms_output.put_line( 'Give bonus ' || bonus_amount || '.');end;/

Page 33: Distributed Database Applications COSC 5050 Week One.

Jiangping WangDistributed Database Applications

Loop Statement

Simple loopFOR loopWHILE loopCursor FOR loop

Page 34: Distributed Database Applications COSC 5050 Week One.

Jiangping WangDistributed Database Applications

Simple LoopPROCEDURE set_all_ranks (max_rank_in IN INTEGER)

IS

ranking_level NUMBER (3) := 1;

BEGIN

LOOP

EXIT WHEN ranking_level > max_rank_in;

set_rank (ranking_level);

ranking_level := ranking_level + 1;

END LOOP;

END set_all_ranks;

Use EXIT or EXIT WHEN to exit loop

Page 35: Distributed Database Applications COSC 5050 Week One.

Jiangping WangDistributed Database Applications

For LoopPROCEDURE set_all_ranks (max_rank_in IN INTEGER)

IS

ranking_level NUMBER (3) := 1;

BEGIN

FOR ranking_level IN 1 .. max_rank_in

LOOP

set_rank (ranking_level);

END LOOP;

END set_all_ranks;

Reverse loop:

FOR counter IN REVERSE 1 .. max

LOOP

END LOOP;

Page 36: Distributed Database Applications COSC 5050 Week One.

Jiangping WangDistributed Database Applications

WHILE LoopPROCEDURE set_all_ranks (max_rank_in IN INTEGER)

IS

ranking_level NUMBER (3) := 1;

BEGIN

WHILE ranking_level <= max_rank_in

LOOP

set_rank (ranking_level);

ranking_level := ranking_level + 1;

END LOOP;

END set_all_ranks;

Page 37: Distributed Database Applications COSC 5050 Week One.

Jiangping WangDistributed Database Applications

Cursor FOR Loop

Cursor with simple loop

DECLARE CURSOR name_cur IS SELECT lname, fname FROM employee WHERE ssn like '8%'; name_rec name_cur%ROWTYPE;BEGIN OPEN name_cur; LOOP FETCH name_cur INTO name_rec; EXIT WHEN name_cur%NOTFOUND; DBMS_OUTPUT.PUT_LINE( name_rec.fname || ' ' || name_rec.lname); END LOOP; CLOSE name_cur;END;/

Page 38: Distributed Database Applications COSC 5050 Week One.

Jiangping WangDistributed Database Applications

Cursor FOR Loop

Cursor with simple loop

DECLARE CURSOR occupancy_cur IS SELECT pet_id, room_number FROM occupancy WHERE occupied_dt = TRUNC(SYSDATE); occupancy_rec occupancy_cur%ROWTYPE;BEGIN OPEN occupancy_cur; LOOP FETCH occupancy_cur INTO occupancy_rec; EXIT WHEN occupancy_cur%NOTFOUND; update_bill (occupancy_rec.pet_id, occupancy_rec.room_number); END LOOP; CLOSE occupancy_cur;END;

Page 39: Distributed Database Applications COSC 5050 Week One.

Jiangping WangDistributed Database Applications

Cursor FOR Loop

Cursor For loop

DECLARE CURSOR occupancy_cur IS SELECT pet_id, room_number FROM occupancy WHERE occupied_dt = TRUNC(SYSDATE);BEGIN FOR occupancy_rec IN occupancy_cur LOOP update_bill (occupancy_rec.pet_id, occupancy_rec.room_number); END LOOP;END;

Page 40: Distributed Database Applications COSC 5050 Week One.

Jiangping WangDistributed Database Applications

Cursor FOR Loop

Cursor FOR loop

DECLARE

CURSOR name_cur IS

SELECT lname, fname

FROM employee WHERE ssn like '8%';

BEGIN

FOR name_rec IN name_cur

LOOP

DBMS_OUTPUT.PUT_LINE(

name_rec.fname || ' ' || name_rec.lname);

END LOOP;

END;

/

Page 41: Distributed Database Applications COSC 5050 Week One.

Jiangping WangWebster University Distributed Database Applications

HomeworkGiven the table layout, write the SQL to create the tableCreate a script file to load database tableCreate an anonymous PL/SQL block to retrieve data from above database tableCreate a simple procedure in your DB2 Company schema to retrieve employee dataProject proposal