Programming in Oracle with PL/SQL
Upcoming SlideShare
Loading in...5
×
 

Programming in Oracle with PL/SQL

on

  • 2,624 views

PL/SQL...

PL/SQL
PL/SQL Blocks
Anonymous blocks
Using select statement
Using conditions
Loops
Printing output
Named blocks
Functions
Procedures
Triggers

Statistics

Views

Total Views
2,624
Views on SlideShare
2,423
Embed Views
201

Actions

Likes
1
Downloads
113
Comments
0

2 Embeds 201

http://www.ustudy.in 189
http://ustudy.in 12

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Programming in Oracle with PL/SQL Programming in Oracle with PL/SQL Presentation Transcript

  • Programming in Oraclewith PL/SQL Procedural Language Extension toSQL
  • n PL/SQLn PL/SQL Blocksn Anonymous blocks n Using select statement n Using conditions n Loops n Printing outputn Named blocks n Functions n Procedures n Triggers
  • PL/SQLn Allows using general programming tools with SQL, for example: loops, conditions, functions, etc.n This allows a lot more freedom than general SQL, and is lighter-weight than JDBC.n We write PL/SQL code in a regular file, for example PL.sql, and load it with @PL in the sqlplus console.
  • PL/SQL Blocksn PL/SQL code is built of Blocks, with a unique structure.n There are two types of blocks in PL/SQL: 1. Anonymous Blocks: have no name (like scripts) n can be written and executed immediately in SQLPLUS n can be used in a trigger 2. Named Blocks: n Procedures n Functions
  • Anonymous Block Structure:DECLARE (optional) /* Here you declare the variables you will use in this block */BEGIN (mandatory) /* Here you define the executable statements (what the block DOES!)*/EXCEPTION (optional) /* Here you define the actions that take place if an exception is thrown during the run of this block */END; (mandatory)/A correct completion of a block will generate the following message:PL/SQL procedure successfully completed
  • DECLARESyntaxidentifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr];ExamplesDeclare birthday DATE; age NUMBER(2) NOT NULL := 27; name VARCHAR2(13) := Levi; magic CONSTANT NUMBER := 77; valid BOOLEAN NOT NULL := TRUE;
  • SELECT StatementsDECLARE v_sname VARCHAR2(10); v_rating NUMBER(3);BEGIN SELECT sname, rating INTO v_sname, v_rating FROM Sailors WHERE sid = 112;END;/ n INTO clause is required. n Query must return exactly one row. n Otherwise, a NO_DATA_FOUND or TOO_MANY_ROWS exception is thrown
  • Conditional logicCondition: Nested conditions: If <cond> If <cond> then <command> then if <cond2> elsif <cond2> then then <command1> <command2> end if; else else <command2> <command3> end if; end if;
  • IF-THEN-ELSIF Statements. . .IF rating > 7 THEN v_message := You are great;ELSIF rating >= 5 THEN v_message := Not bad;ELSE v_message := Pretty bad;END IF;. . .
  • Suppose we have the following table: mylog create table mylog( logon_nu who m who varchar2(30), logon_num number Peter 3 );n Want to keep track of how John 4 many times someone Moshe 2 logged on to the DBn When running, if user is already in table, increment logon_num. Otherwise, insert user into table
  • SolutionDECLARE cnt NUMBER;BEGIN select count(*) into cnt from mylog where who = user; if cnt > 0 then update mylog set logon_num = logon_num + 1 where who = user; else insert into mylog values(user, 1); end if; commit;end;/
  • Loops: FOR LoopDECLARE i number_table.num%TYPE;BEGIN FOR i IN 1..10 LOOP INSERT INTO number_table VALUES(i); END LOOP;END; Notice that i is incremented automatically
  • Loops: WHILE LoopDECLARETEN number:=10;i number_table.num%TYPE:=1;BEGIN WHILE i <= TEN LOOP INSERT INTO number_table VALUES(i); i := i + 1; END LOOP;END;
  • Printing Outputn You need to use a function in the DBMS_OUTPUT package in order to print to the outputn If you want to see the output on the screen, you must type the following (before starting): set serveroutput on format wrapped size 1000000n Then print using n dbms_output. put_line(your_string); n dbms_output.put(your_string);
  • Functions and Proceduresn Up until now, our code was in an anonymous blockn It was run immediatelyn It is useful to put code in a function or procedure so it can be called several timesn Once we create a procedure or function in a Database, it will remain until deleted (like a table).
  • Creating Procedures CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter1 [mode1] datatype1, parameter2 [mode2] datatype2, . . .)] IS|AS PL/SQL Block;n Modes: n IN: procedure must be called with a value for the parameter. Value cannot be changed n OUT: procedure must be called with a variable for the parameter. Changes to the parameter are seen by the user (i.e., call by reference) n IN OUT: value can be sent, and changes to the parameter are seen by the usern Default Mode is: IN
  • Example- what does this do?Table mylog create or replace procedure logon_ num_loggedwho num (person IN mylog.who%TYPE, num OUT mylog.logon_num%TYPE) ISPete 3 BEGIN select logon_num into numJohn 4 from mylog where who = person; END;Joe 2 /
  • Calling the Proceduredeclare howmany mylog.logon_num%TYPE;begin num_logged(‘John,howmany); dbms_output.put_line(howmany);end;/
  • Errors in a Proceduren When creating the procedure, if there are errors in its definition, they will not be shownn To see the errors of a procedure called myProcedure, type SHOW ERRORS PROCEDURE myProcedure in the SQLPLUS promptn For functions, type SHOW ERRORS FUNCTION myFunction
  • Creating a Function n Almost exactly like creating a procedure, but you supply a return typeCREATE [OR REPLACE] FUNCTIONfunction_name [(parameter1 [mode1] datatype1, parameter2 [mode2] datatype2, . . .)]RETURN datatypeIS|ASPL/SQL Block;
  • A Functioncreate or replace functionrating_message(rating IN NUMBER) YOU NOTE THATreturn VARCHAR2 DONT SPECIFY THEAS SIZEBEGIN IF rating > 7 THEN return You are great; ELSIF rating >= 5 THEN return Not bad; ELSE return Pretty bad; END IF;END;/
  • Calling the functiondeclare paulRate:=9;Begindbms_output.put_line(ratingMessage(paulRate));end;/
  • Creating a function:create or replace function squareFunc(num in number)return numberisBEGINreturn num*num;End;/ Using the function:BEGINdbms_output.put_line(squareFunc(3.5));END;/
  • Triggersn A trigger is a statement that is executed automatically by the system as a side effect of a modification to the database.n To design a trigger mechanism, we must: n Specify the conditions under which the trigger is to be executed. n Specify the actions to be taken when the trigger executes.
  • Trigger Examplen Suppose that instead of allowing negative account balances, the bank deals with overdrafts by n setting the account balance to zero n creating a loan in the amount of the overdraft n giving this loan a loan number identical to the account number of the overdrawn accountn The condition for executing the trigger is an update to the account relation that results in a negative balance value.
  • Trigger Examplecreate trigger overdraft-trigger after update on accountreferencing new row as nrowfor each rowwhen nrow.balance < 0begin atomic insert into borrower (select customer-name, account-number from depositor where nrow.account-number = depositor.account-number); insert into loan values (n.row.account-number, nrow.branch-name, – nrow.balance); update account set balance = 0 where account.account-number = nrow.account-numberend