Download - Oracle Part3

Transcript
  • 7/29/2019 Oracle Part3

    1/106

    Chapter 4:

    Introduction to PL/SQL

    Guide to Oracle 10g

  • 7/29/2019 Oracle Part3

    2/106

    Guide to Oracle 10g 2

    Lesson A Objectives

    After completing this lesson, you should be able to:

    Describe the fundamentals of the PL/SQL

    programming language Write and execute PL/SQL programs in SQL*Plus

    Execute PL/SQL data type conversion functions

    Display output through PL/SQL programs

    Manipulate character strings in PL/SQL programs

    Debug PL/SQL programs

  • 7/29/2019 Oracle Part3

    3/106

    Guide to Oracle 10g 3

    Introduction

    DB users use GUI applications to enter data intoinput boxes, and then click buttons to executeprograms that perform DB functions.

    We will use the following utilities:Form builder

    Report builder

    To use these utilities effectively an understanding ofPL/SQL is needed.

    PL/SQL is a procedural programming language thatOracle utilities use to manipulate DB data.

    Programming or scripting language conceptsunderstanding is necessary.

  • 7/29/2019 Oracle Part3

    4/106

    Guide to Oracle 10g 4

    Fundamentals of PL/SQL

    PL/SQL program combines SQL queries withprocedural commands (if/then, loops).

    It is a full-featured programming language Executed using Oracle 10gutilities such as:SQL*Plus or

    Forms Builder It is an interpreted language

    Its commands are not a case sensitive. Inside single

    quotes are case sensitive.. M != m Semicolon ends each command

    It contains reserved words and built in functions.

  • 7/29/2019 Oracle Part3

    5/106

    Guide to Oracle 10g 5

    PL/SQL Command Capitalization

    Styles

  • 7/29/2019 Oracle Part3

    6/106

    Guide to Oracle 10g 6

    PL/SQL Variables and Data Types

    Variable names must follow the Oracle namingstandard

    Strongly typed language:Explicitly declare each variable including data type

    before using variable

    Variable declaration syntax: var i abl e_name dat a_t ype_decl ar at i on;

    Default value always NULL PL/SQL supports: scalar, composite, reference and

    LOB.

  • 7/29/2019 Oracle Part3

    7/106

    Guide to Oracle 10g 7

    Scalar Variables

    Reference single value Data types correspond to Oracle 10gdatabase data

    types

    VARCHAR2CHAR

    DATE

    NUMBER

  • 7/29/2019 Oracle Part3

    8/106

    Guide to Oracle 10g 8

    General Scalar Data Types

  • 7/29/2019 Oracle Part3

    9/106

    Guide to Oracle 10g 9

    Composite Variables

    Data Structure is a data object made up of multiple

    individual data elements Composite variable is a data structure contains

    multiple scalar variables

    Types:

    RECORD

    TABLEVARRAY

  • 7/29/2019 Oracle Part3

    10/106

    Guide to Oracle 10g 10

    Reference Variables

    Reference variables directly reference specificdatabase column or row

    Reference variables assume data type of associatedcolumn or row

    %TYPE data declaration syntax: var i abl e_namet abl ename. f i el dname%TYPE;

    %ROWTYPE data declaration syntax: var i abl e_name t abl ename%ROWTYPE;

  • 7/29/2019 Oracle Part3

    11/106

    Guide to Oracle 10g 11

    Reference Variables

    The (%TYPE) reference data type specifies avariable that references a single DB field.

    current_f_last FACULTY.F_LAST%TYPE;

    The current_f_last variable assumes a data type ofVARCHAR2(30), because this is the data type ofthe f_last column in the FACULTY table.

  • 7/29/2019 Oracle Part3

    12/106

    Guide to Oracle 10g 12

    Reference Variables

    The (%ROWTYPE) reference data type createscomposite variables that reference the entire data

    record. Facul t y_r ow FACULTY%ROWTYPE;

    The variable faculty_row references all of thecolumns in the FACULTY table, and each column

    has the same data type as its associated DB column.

  • 7/29/2019 Oracle Part3

    13/106

    Guide to Oracle 10g 13

    LOB Data Types

    It declares variables that referencebinary orcharacterdata objects up to 4 GB.

    LOB values in PL/SQL programs must be

    manipulated using special package calledDBMS_LOB.

  • 7/29/2019 Oracle Part3

    14/106

    Guide to Oracle 10g 14

    PL/SQL Program Blocks

    Declaration section (DECLARE) Optional (variable declaration)

    Execution section (BEGIN) Required (Program statements)

    Exception section (EXCEPTION) Optional (Error handling statements)

    Comment statements

    Enclosed within /* and */ Two hyphens (--) for a single line comment

    END;

  • 7/29/2019 Oracle Part3

    15/106

    Guide to Oracle 10g 15

    PL/SQL Arithmetic Operators in

    Describing Order of Precedence

  • 7/29/2019 Oracle Part3

    16/106

    Guide to Oracle 10g 16

    Assignment Statements

    Assigns value to variable Operator

    :=

    Syntax var i abl e_name : = val ue;

    String literal must be enclosed in a singlequotation marks.

  • 7/29/2019 Oracle Part3

    17/106

    Guide to Oracle 10g 17

    Assignment Statements You can use the := in the declaration section to

    give initial values. s_id NUMBER := 100;

    You can use DEFAULT instead: s_id NUMBER DEFAULT 100;

    IfNULL value is used in an assignment statementwith arithmetic operation, the result is always

    NULL.

  • 7/29/2019 Oracle Part3

    18/106

    Guide to Oracle 10g 18

    Executing a PL/SQL Program in

    SQL*Plus

    Create and execute PL/SQL program blockswithin variety of Oracle 10gdevelopmentenvironments:

    SQL *PlusForm Builder

    Report Builder

  • 7/29/2019 Oracle Part3

    19/106

    Guide to Oracle 10g 19

    Displaying PL/SQL Program Output in SQL*Plus

    PL/SQL outputbuffer

    Memory area on database server

    Stores programs output values before they aredisplayed to user

    Buffer size should be increased before output is

    displayed: SET SERVEROUTPUT ON SI ZE buf f er _si ze

    Default buffer size

    2000 bytes

    If the output is more than buffer_size, error apperas.

  • 7/29/2019 Oracle Part3

    20/106

    Guide to Oracle 10g 20

    Displaying PL/SQL Program Output in SQL*Plus

    (continued)

    Display program output

    DBMS_OUTPUT. PUT_LI NE( ' di spl ay_t ext' ) ;

    Display maximum of 255 characters of text data.

    More than 255 characters gives an error.

    Example: s_name := Ahmed Mahmoud;

    DBMS_OUTPUT. PUT_LI NE( s_name) ;

  • 7/29/2019 Oracle Part3

    21/106

    Guide to Oracle 10g 21

    Writing a PL/SQL Program

    Write PL/SQL program in Notepad or another texteditor

    Copy and paste program commands into SQL*Plus

    Press Enter after last program command Type front slash ( / ) (to instruct the interpreter to execute the code)

    Then press Enter again

  • 7/29/2019 Oracle Part3

    22/106

    Guide to Oracle 10g 22

    Writing a PL/SQL Program

    (continued)

    Good programming practicePlace DECLARE, BEGIN, and END commandsflush with left edge of text editor window

    Indent commands within each section

  • 7/29/2019 Oracle Part3

    23/106

    Guide to Oracle 10g 23

    PL/SQL Program Commands

    Output: Todays data is

    18-OCT-07PL/SQL procedure successfully completed

    If no output appears use: SQL> set serveroutput on

  • 7/29/2019 Oracle Part3

    24/106

    Guide to Oracle 10g 24

    PL/SQL Data Conversion Functions

    Implicit data conversions Interpreter automatically converts value from one data

    type to another(the command DBMS_OUTPUT.PUT_LINE(todays_date), theinterpreter automatically converted the todas_date DATE variable to a text string foroutput

    ). If PL/SQL interpreter unable to implicitly convert value

    error occurs

    Explicit data conversionsConvert variables to different data typesUsing built in data conversion functions

  • 7/29/2019 Oracle Part3

    25/106

    Guide to Oracle 10g 25

    PL/SQL Data Conversion Functions of

    PL/SQL

  • 7/29/2019 Oracle Part3

    26/106

    Guide to Oracle 10g 26

    Manipulating Character Strings with

    PL/SQL String

    Character data value

    Consists of one or more characters

    Concatenating

    Joining two separate strings Parse

    Separate single string consisting of two data items

    separated by commas or spaces Built in functions to concatenate and parse strings

    in SQL*Plus are as follows:

  • 7/29/2019 Oracle Part3

    27/106

    Guide to Oracle 10g 27

    Concatenating Character Strings

    Double bar Operator

    ||

    Syntax:

    new_st r i ng : = st r i ng1 | | st r i ng2;

    Exampl e: Ful l _name : = Qusai | | | | Abuei n

    You must conver t NUMBER and DATE dat at ype var i abl es ( TO_CHAR) i nt o a st r i ngbef or e concat enat i ng i t .

  • 7/29/2019 Oracle Part3

    28/106

    Guide to Oracle 10g 28

    Removing Blank Leading and Trailing

    Spaces from Strings

    LTRIM functionRemove blank leading spaces

    st r i ng : = LTRI M( st r i ng_var i abl e_name) ;

    RTRIM functionRemove blank trailing spaces

    st r i ng : = RTRI M( st r i ng_var i abl e_name) ;

  • 7/29/2019 Oracle Part3

    29/106

    Guide to Oracle 10g 29

    Finding the Length of Character

    Strings

    LENGTH function syntax

    st r i ng_l engt h : = LENGTH( st r i ng_var i abl e_name) ;

    Space i s i ncl uded wher ever i t appear s. DBMS_OUTPUT. PUT_LI NE( LENGTH( ' Today' ' s dat e i s ' ) ) ;

    Gi ves 20.

  • 7/29/2019 Oracle Part3

    30/106

    Guide to Oracle 10g 30

    Character String Case Functions

    Modify case of character strings Functions and syntax:

    st r i ng : =

    UPPER( st r i ng_var i abl e_name) ; st r i ng : =

    LOWER( st r i ng_var i abl e_name) ;

    st r i ng : =I NI TCAP( st r i ng_var i abl e_name) ;

  • 7/29/2019 Oracle Part3

    31/106

    Guide to Oracle 10g 31

    Parsing Character Strings

    INSTRfunction

    Searches string for specific substring

    If substring is found, the starting position of itwithin the original_string is returned as integervalue. Otherwise, zero is returned.

    Syntax: st ar t _posi t i on : =

    I NSTR( or i gi nal _st r i ng, subst r i ng) ;

    st ar t _posi t i oi n shoul d be i nt egerdat a t ype.

  • 7/29/2019 Oracle Part3

    32/106

    Guide to Oracle 10g 32

    Parsing Character Strings

    SUBSTRfunctionExtracts specific number of characters from characterstring starting at given point

    Syntax: ext r act ed_st r i ng : = SUBSTR( st r i ng_var i abl e,

    st ar t i ng_poi nt, number _of _char act er s) ;

    To parse a string, usually INSTR is used to find delimiter and then use theSUBSTR.

    Example page 206, 207.

  • 7/29/2019 Oracle Part3

    33/106

    Guide to Oracle 10g 33

    Debugging PL/SQL Programs

    Syntax errorOccurs when command does not follow guidelinesof programming language

    Generate compiler or interpreter error messages Logic error

    Does not stop program from running

    Results in incorrect result

  • 7/29/2019 Oracle Part3

    34/106

    Guide to Oracle 10g 34

    Program with a Syntax Error

  • 7/29/2019 Oracle Part3

    35/106

    Guide to Oracle 10g 35

    Program with a Logic Error

  • 7/29/2019 Oracle Part3

    36/106

    Guide to Oracle 10g 36

    Finding Syntax Errors

    Often involve:Misspelling reserved word

    Omitting required character in command

    Using built-in function improperly Interpreter

    Flags line number and character location of syntaxerrors

    May actually be on preceding line

    Displays error code and message

  • 7/29/2019 Oracle Part3

    37/106

    Guide to Oracle 10g 37

    Finding Syntax Errors (continued)

    Comment out program linesTo find error

    Cascading errors are called so when

    One syntax error can generate many more errorsFix the first error andrerun the program. Do not fix

    next errors before rerunning the program.

  • 7/29/2019 Oracle Part3

    38/106

    Guide to Oracle 10g 38

    Finding Logic Errors

    Caused by:

    Not using proper order of operations in arithmeticfunctions

    Passing incorrect parameter values to built-infunctions

    Creating loops that do not terminate properly

    Using data values that are out of range or not ofright data type

  • 7/29/2019 Oracle Part3

    39/106

    Guide to Oracle 10g 39

    Finding Logic Errors (continued)

    Debugger

    Program that enables software developers to pauseprogram execution and examine current variable

    valuesBest way to find logic errors

    SQL*Plus environment does not provide PL/SQL

    debuggerUse DBMS_OUTPUT to print variable values

  • 7/29/2019 Oracle Part3

    40/106

    Guide to Oracle 10g 40

    Lesson A Summary

    PL/SQL data types:

    ScalarComposite

    Reference

    LOB

    Program block

    DeclarationExecution

    Exception

  • 7/29/2019 Oracle Part3

    41/106

    Guide to Oracle 10g 41

    Lesson B Objectives

    After completing this lesson, you should be able to:

    Create PL/SQL decision control structures Use SQL queries in PL/SQL programs

    Create loops in PL/SQL programs Create PL/SQL tables and tables of records

    Use cursors to retrieve database data into PL/SQLprograms

  • 7/29/2019 Oracle Part3

    42/106

    Guide to Oracle 10g 42

    Lesson B Objectives (continued)

    Use the exception section to handle run-time errors inPL/SQL programs

  • 7/29/2019 Oracle Part3

    43/106

    Guide to Oracle 10g 43

    PL/SQL Decision Control Structures

    Sequentialprocessing

    Processes statements one after another

    Decision control structures

    Alter order in which statements executeBased on values of certain variables

  • 7/29/2019 Oracle Part3

    44/106

    Guide to Oracle 10g 44

    IF/THEN

    Syntax:I F condi t i onTHEN

    commands t hat execut e i f condi t i oni s TRUE;

    END I F;

    Condition

    Expression evaluates to TRUE or FALSE If TRUE commands execute

    Example

  • 7/29/2019 Oracle Part3

    45/106

    Example

    Guide to Oracle 10g 45

  • 7/29/2019 Oracle Part3

    46/106

    Guide to Oracle 10g 46

    PL/SQL Comparison Operators

    Do not get confused with the equal (=) sign and the assignment (:=) operator

  • 7/29/2019 Oracle Part3

    47/106

    Guide to Oracle 10g 47

    IF/THEN/ELSE

    Syntax:

    I F condi t i onTHEN

    commands t hat execut e i f condi t i oni s TRUE;

    ELSE

    commands t hat execut e i f condi t i oni s FALSE;

    END I F; Evaluates ELSE command if condition FALSE

  • 7/29/2019 Oracle Part3

    48/106

    Example

    Guide to Oracle 10g 48

  • 7/29/2019 Oracle Part3

    49/106

    Guide to Oracle 10g 49

    Nested IF/THEN/ELSE

    Placing one or more IF/THEN/ELSE statementswithin program statements that execute after IF orELSE command

    Important to properly indent program lines

    IF/ELSIF Syntax:

  • 7/29/2019 Oracle Part3

    50/106

    50

    Syntax:I F condi t i on1 THEN

    commands t hat execut e i f condi t i on1 i s TRUE;

    ELSI F condi t i on2THEN

    commands t hat execut e i f condi t i on2 i s TRUE;

    . . .

    ELSE

    commands t hat execut e i f no condi t i ons TRUE;

    END I F;

    Not e t her e i s no E f i r e I F i n ELSI F, and no spaces.

  • 7/29/2019 Oracle Part3

    51/106

    Guide to Oracle 10g 51

    Logical Operators AND, OR, and

    NOT

    Create complex expressions for decision controlstructure condition

    AND

    Expressions on both sides of operator must be truefor combined expression to be TRUE

    OR

    Expressions on either side of operator must be truefor combined expression to be TRUE

  • 7/29/2019 Oracle Part3

    52/106

    Guide to Oracle 10g 52

    Logical Operators AND, OR, and

    NOT (continued)

    Order of evaluation:

    NOT (evaluated first)

    AND

    OR

  • 7/29/2019 Oracle Part3

    53/106

    Guide to Oracle 10g 53

    Evaluating AND and OR in an

    Expression

  • 7/29/2019 Oracle Part3

    54/106

    Guide to Oracle 10g 54

    Using SQL Queries in PL/SQL Programs

    Use SQL action query

    Put query or command in PL/SQL program

    Use same syntax as execute query or command inSQL*Plus

    Can use variables instead of literal values to specify

    data values

    Ex: curr_f_name := Ahmad

    We need to insert Ahmad into a column S_FIRST

    INSERT INTO student (s_first)

    VALUES (curr_f_name);

    Ex: WHERE s_first = curr_f_name;

    PL/SQL Command

  • 7/29/2019 Oracle Part3

    55/106

    Guide to Oracle 10g 55

    Using SQL Commands in PL/SQL

    Programs

  • 7/29/2019 Oracle Part3

    56/106

    Guide to Oracle 10g 56

    Loops

    Systematically executes program statements

    Periodically evaluates exit condition to determine

    if loop should repeat or exit Pretest loop

    Evaluates exit condition before any programcommands execute

    Posttest loop

    Executes program commands before loop evaluatesexit condition for first time

    In PL/SQL there are FIVE loop structures.

  • 7/29/2019 Oracle Part3

    57/106

    Guide to Oracle 10g 57

    The LOOP...EXIT Loop This kind of loop can be either Pretest or posttest

    Syntax:LOOP[ pr ogr am st at ement s]

    I F condi t i onTHENEXI T;

    END I F;

    [ addi t i onal pr ogr am st at ement s]END LOOP;

    The LOOP EXIT Loop

  • 7/29/2019 Oracle Part3

    58/106

    Guide to Oracle 10 58

    The LOOP...EXIT Loop LOOP keyword signals the beginning of the loop.

    If the IF/THEN decision structure is the first code in theloop, it is a pretest loop.

    If the IF/THEN decision structure is the last code in the

    loop, it is a posttest loop.

    The LOOP...EXIT WHEN Loop

  • 7/29/2019 Oracle Part3

    59/106

    Guide to Oracle 10g 59

    p Can be either a Pretest or posttest

    Syntax:

    LOOP

    pr ogr am st at ement s

    EXI T WHEN condi t i on;END LOOP;

    The WHILE...LOOP

  • 7/29/2019 Oracle Part3

    60/106

    Guide to Oracle 10g 60

    It is a Pretest loop that test the condition before it executeany program statements.

    Syntax:

    WHI LE condi t i on LOOP

    pr ogr am st at ement sEND LOOP;

  • 7/29/2019 Oracle Part3

    61/106

    Guide to Oracle 10g 61

    The Numeric FOR Loop

    In the previous LOOP structures we had toincrement the counter variable.

    The numeric FOR does not require explicitcounter increment

    Automatically increments counter

    Syntax:FOR count er _var i abl e I N st ar t _val ue . . . end_val ue

    LOOP

    pr ogr am st at ement s

    END LOOP;

    Start_value and end_value must be integer. The increment is always done

    by 1.

  • 7/29/2019 Oracle Part3

    62/106

    Example

    Guide to Oracle 10g 62

    C FOR L

  • 7/29/2019 Oracle Part3

    63/106

    Guide to Oracle 10g 63

    Cursors FOR Loop

    Pointer to memory location on database server thatthe DBMS uses to process a SQL query

    A cursor is a mechanism by which you can assign

    a name to a "select statement" and manipulate theinformation within that SQL statement

    Use to:

    Retrieve and manipulate database data from thetables into PL/SQL programs

    Types: Implicit

    Explicit

    Implicit Cursors

  • 7/29/2019 Oracle Part3

    64/106

    Guide to Oracle 10g 64

    For every SQL statement execution certain area inmemory is allocated. PL/SQL allow you to name thisarea. This private SQL area is calledcontext area or

    cursor. A cursor acts as a handle orpointerinto thecontext area. A PL/SQL program controls the contextarea using the cursor.

    Context area Is a memory location on the DB server contains

    information about query, such as the number of rowsthe query processed.

    Created by INSERT, UPDATE, DELETE, or SELECT

  • 7/29/2019 Oracle Part3

    65/106

    Implicit Cursors

    Active setSet of data rows that query retrieves using

    SELECT

    Implicit cursor Is a Pointer to the context area.

    Called so because you do not need explicitcommand to create it.

    Guide to Oracle 10g 65

    Cont

  • 7/29/2019 Oracle Part3

    66/106

    For SQL queries returning single row PL/SQL

    declares implicit cursors. Implicit cursors are simple SELECT statements

    and are written in the BEGIN block (executablesection) of the PL/SQL.

    Implicit cursors are easy to code, and they retrieve

    exactly one row. PL/SQL implicitly declares cursors for all DML

    statements.

    The most commonly raised exceptions here areNO_DATA_FOUND orTOO_MANY_ROWS.

    Guide to Oracle 10g 66To be discussed later

    Implicit Cursors (continued)

  • 7/29/2019 Oracle Part3

    67/106

    Implicit Cursors (continued)

    Can be used to assign output of SELECT query toPL/SQL program variables:

    When query will return only one record

    If the query returns more than one record or zerorecords, an error occurs.

    Syntax:

    SELECT ename, sal INTO ena, esa FROM EMP WHERE EMPNO = 7844;

  • 7/29/2019 Oracle Part3

    68/106

    Cont

    Implicit Cursors (continued)

  • 7/29/2019 Oracle Part3

    69/106

    Guide to Oracle 10g 69

    Implicit Cursors (continued)

    Syntax:SELECT f i el d1, f i el d2, . . .

    I NTO var i abl e1, var i abl e2, . . .

    FROM t abl e1, t abl e2, . . .WHERE j oi n_condi t i ons

    AND sear ch_condi t i on_t o_r et r i eve_1_r ecor d;

    The val ue of f i el d1 i s assi gned t o var i abl e1, f i el d2t o var i abl e2 and so on.

    Dat a t ypes of f i el d1, f i el d2 and var i abl e1, var i abl e2must be t he same.

    After we discuss join

    Implicit Cursors (continued)

  • 7/29/2019 Oracle Part3

    70/106

    Guide to Oracle 10g 70

    Implicit Cursors (continued)

    Useful to use %TYPE reference data type To declare variables used with implicit cursors

    Syntax: var_name tablename.fieldname%TYPE

    Ex: curr_f_last faculty.f_last%TYPE Error ORA-01422: exact fetch returns more than requested

    number of rows .

    Implicit cursor query tried to retrieve multiple records Error ORA-014032: no data found.

    If one of these errors occur, you shouldmodify the query to

    retrieve only one record, oruse Explicit cursor.

  • 7/29/2019 Oracle Part3

    71/106

  • 7/29/2019 Oracle Part3

    72/106

    Example

    Guide to Oracle 10g 72

  • 7/29/2019 Oracle Part3

    73/106

    Guide to Oracle 10g 73

    Explicit Cursors

    Retrieve and display data in PL/SQL programs for

    query that might:Retrieve multiple records

    Return no records at all

    Steps for creating and using explicit cursorDeclare cursor

    Open cursorFetch data rows

    Close cursor

  • 7/29/2019 Oracle Part3

    74/106

    Explicit cursor functions

    Guide to Oracle 10g 74

  • 7/29/2019 Oracle Part3

    75/106

    Controlling Explicit Cursors

    Guide to Oracle 10g 75

  • 7/29/2019 Oracle Part3

    76/106

    Cont

    Guide to Oracle 10g 76

    Explicit Cursors (continued)

  • 7/29/2019 Oracle Part3

    77/106

    Guide to Oracle 10g 77

    Explicit Cursors (continued)

    Declare explicit cursor syntax: by declaring an explicit cursor, you create amemory location on the DB server that processes a query and stores the retrieved records .

    Syntax:CURSOR cur sor _name I S sel ect _quer y; cur sor _name: Any val i d PL/ SQL name.

    sel ect _quer y: The quer y t hat r et r i eves t he dat a val ues.

    Open explicit cursor syntax: by doing so the interpreter checks for syntaxerror, upon correct it translate the query into machine-language format. The system thencreates the memory location that stores the active set (contains the retrieved data using

    SELECT) .Syntax

    OPEN cur sor _name;

  • 7/29/2019 Oracle Part3

    78/106

    Guide to Oracle 10g 78

    Explicit Cursors (continued)

  • 7/29/2019 Oracle Part3

    79/106

    Guide to Oracle 10g 79

    p ( )

    Fetchcommand is used to retrieve the data from the DB into the active set, one row

    at a time.

    Because a query might return several rows, you execute theFETCH command within a (LOOPEXIT WHEN) loop:

    Syntax:

    LOOP

    FETCH cur sor _name I NTO

    var i abl e_name( s) ;

    EXI T WHEN cur sor _name%NOTFOUND;

    Cursor_name is name of the cursor defined previously.

    Variable_name(s) represents either a single variable or a list of variables that receivesdata from the cursors SELECT query. (every retrieved column from the DB table isassociated with a program variable, %TYPE or %ROWTYPE)

  • 7/29/2019 Oracle Part3

    80/106

    Guide to Oracle 10g 80

    Explicit Cursors (continued)

  • 7/29/2019 Oracle Part3

    81/106

    Guide to Oracle 10g 81

    p ( )

    Active set pointeris created when processing explicitcursor that:

    Indicates memory location of the next record retrievedfrom database

    After the last record of the query is executed, that

    pointer points to an empty record.The condition (EXI T WHEN cur sor _name%NOTFOUND)

    guarantees the exit when the pointer points to an empty

    record.

    Explicit Cursors (continued)

  • 7/29/2019 Oracle Part3

    82/106

    Guide to Oracle 10g 82

    Explicit Cursors (continued)

    Close cursor syntax:

    CLOSE cur sor _name;

    You shoul d cl ose a cur sor af t erpr ocessi ng al l r ecor ds so as t he memor y

    and ot her r esour ces ar e avai l abl e t ot he syst em f or ot her t asks.

    The syst em aut omat i cal l y cl oses t hecur sor when t he pr ogr am ends, i f youf or get t o do so.

    Processing Explicit Cursors Using a

  • 7/29/2019 Oracle Part3

    83/106

    LOOP...EXIT WHEN Loop

    Often used to process explicit cursors that retrieveand display database records

    Use %TYPE variable to display explicit cursorvalues (See example Figure 4-29 page 243)

    Use %ROWTYPE variable to display explicit

    cursor values

  • 7/29/2019 Oracle Part3

    84/106

    Guide to Oracle 10g 84

    Processing Explicit Cursors Using a

    Cursor FOR Loop

    Make it easier than LOOP...EXIT WHEN to processexplicit cursors.

    For Loop automatically:

    Opens cursorFetches records

    Closes cursor

    Processing Explicit Cursors Using a

    C FOR L ( i d)

  • 7/29/2019 Oracle Part3

    85/106

    85

    Cursor FOR Loop (continued)

    Syntax:FOR var i abl e_name( s) I N cur sor _name

    LOOP

    pr ocessi ng commands

    END LOOP;

    Explicit Cursors Using a Cursor FOR Loop

  • 7/29/2019 Oracle Part3

    86/106

    Guide to Oracle 10g 86

    Explicit Cursors Using a Cursor FOR Loop,

    LOOP...EXIT WHEN

    The cur sor var i abl e can be r ef er encedout si de t he Loop Exi t When. Whi l e cannot be r ef er enced out si de t he For Loop.

  • 7/29/2019 Oracle Part3

    87/106

    Guide to Oracle 10g 87

    Handling Runtime Errors in PL/SQL

    Programs

    Pl/SQL supports Exception handling, that is:

    Programmers place commands for displaying error messagesand

    Give users options for fixing errors in programs exception

    section (Optional section in a PL/SQL program block. Page 195) Runtime errors

    Cause program to fail during execution

    Exception section is used to handle runtime error. Unwanted event.

  • 7/29/2019 Oracle Part3

    88/106

    Handling Runtime Errors in PL/SQL Programs (cont )

  • 7/29/2019 Oracle Part3

    89/106

    Guide to Oracle 10g 89

    Handling Runtime Errors in PL/SQL Programs (cont.)

    An exception orunwantedevent is raisedwhen aruntime error occurs.

    The control is transferred to the exception section,where the exception handlerhas the following options:Correct error without notifying user of problem

    Inform user of error without taking corrective actionCorrect and inform

    Inform the user and allow him to decide what action to

    take. After exception handler executesProgram ends

    Handling Runtime Errors in PL/SQL Programs (cont )

  • 7/29/2019 Oracle Part3

    90/106

    Guide to Oracle 10g 90

    Handling Runtime Errors in PL/SQL Programs (cont.)

    There are three kinds of exceptions:

    Predefined

    UndefinedUser defined

    Predefined Exceptions

  • 7/29/2019 Oracle Part3

    91/106

    Guide to Oracle 10g 91

    p

    Most common errors that occur in programs PL/SQL language:

    Assigns exception name

    Provides built-in exception handlerfor each predefinedexception

    System automatically displays error message informinguser of the nature of the problem

    One can create exception handlers to display alternate

    error messages for predefined exception

    C PL/SQL P d fi d

  • 7/29/2019 Oracle Part3

    92/106

    Guide to Oracle 10g 92

    Common PL/SQL Predefined

    Exceptions

    Exception Handler Syntax

  • 7/29/2019 Oracle Part3

    93/106

    Guide to Oracle 10g 93

    Exception Handler Syntax

    The syntax to write an alternate error messages for predefined handler.

    Exception Handler Syntax

  • 7/29/2019 Oracle Part3

    94/106

    Guide to Oracle 10g 94

    Exception Handler Syntax

    exception_name1, exception_name2, refer to thename of the predefined exception (table 4-10).

    Exception handler commandsrepresent commandsthat display the error message.

    WHEN OTHERS THEN clause is a handler

    presents a general message to describe errors that donot have specific exception handlers.

  • 7/29/2019 Oracle Part3

    95/106

    95

    Exception Handler Syntax

  • 7/29/2019 Oracle Part3

    96/106

    Guide to Oracle 10g 96

    When using alternate error message, such as in the example 4-

    35, which handles only the NO_DATA_FOUND. Anunanticipated error might occur. That way no handler exists tohandle such unanticipated errors.

    For that reason it is helpful to use the WHEN OTHERSexception handler too, so as to display messages for thatsituation.

    To do this, use SQLERRMbuilt-in function (SQL ERRorMessage).

    That function returns a string that contains the most recent error

    code and its description. First define a varchar2 variable of length 512 to assign it the

    error message: error_message := SQLERRM;

  • 7/29/2019 Oracle Part3

    97/106

    Guide to Oracle 10g 97

    Undefined Exceptions

  • 7/29/2019 Oracle Part3

    98/106

    Guide to Oracle 10g 98

    p

    Less common errors

    Do not have predefined names

    One must explicitly declare exception in programsdeclaration section and

    Associate the new exception with a specific Oracle

    error code then

    Create an exception handler in the exception section

    Using the same syntax as for predefined exceptions

    Syntax of Undefined Exceptions

  • 7/29/2019 Oracle Part3

    99/106

    Guide to Oracle 10g 99

    DECLARE

    e-exception_name EXCEPTION;

    PRAGMA EXCEPTION INIT(e-exception_name, -Oracle_error_code);

    e-exception_name represents name you assign to theexception.

    PRAGMA EXCEPTION INIT: a command associates your

    exception name with a specific Oracle error code. The hyphen (-) must precede the Oracle_error_code. See for

    example Figure 4-37 next slide, the code is2291.

    See example Figure 4-38 on undefined exception, next slide.

  • 7/29/2019 Oracle Part3

    100/106

    100

    User-defined Exceptions

  • 7/29/2019 Oracle Part3

    101/106

    Guide to Oracle 10g 101

    User-defined exceptions do not raise Oracle runtimeerror. BUT

    Require exception handling to:

    Enforce business rules (special rules of a company,example page 253. Rule: one can only delete grades withvaluesNULL. Other grades can notbe deleted. If a user

    tries to delete a grade that its value is not NULL, theprogram should raise an exception and display a message)or

    Ensure the integrity of database

    General Syntax for Declaring, Raising, and

    H dli U d fi d E i

  • 7/29/2019 Oracle Part3

    102/106

    Guide to Oracle 10g 102

    Handling a User-defined Exception

    General Syntax for Declaring, Raising, and Handling a User-

    defined Exception

  • 7/29/2019 Oracle Part3

    103/106

    Guide to Oracle 10g 103

    de ed cept o

    To raise the exception, you must use the IF/THEN,which evaluates the exception condition (grade IS NOT

    NULL).

    If the condition is TRUE, the RAISE command isexecuted and raises the exception (transfer execution to

    the exception section). The exception handler executes anddisplays the error-

    handling messages.

  • 7/29/2019 Oracle Part3

    104/106

    Guide to Oracle 10g 104

  • 7/29/2019 Oracle Part3

    105/106

    Guide to Oracle 10g 105

    Lesson B Summary

    Decision control structures:

    IF/THEN

    IF/THEN/ELSE

    IF/ELSIF Loop

    Repeats action multiple times until it reaches exit

    condition

    Five types of loops

  • 7/29/2019 Oracle Part3

    106/106

    Lesson B Summary (continued)

    Cursor

    Pointer to memory location that DBMS uses toprocess SQL query

    Types: Implicit

    Explicit

    Exception handlingThree exception types