SlideShare a Scribd company logo
1 of 31
 Procedural Language – SQL
 An extension to SQL with design features of
programming languages (procedural and object
oriented)
 PL/SQL and Java are both supported as internal
host languages within Oracle products.
 Acts as host language for stored procedures
and triggers.
 Provides the ability to add middle tier business
logic to client/server applications.
 Provides Portability of code from one
environment to another
 Improves performance of multi-query
transactions.
 Provides error handling
DECLARE (optional)
- variable declarations
BEGIN (required)
- SQL statements
- PL/SQL statements or sub-blocks
EXCEPTION (optional)
- actions to perform when errors occur
END; (required)
Anonymous
DECLARE
BEGIN
-statements
EXCEPTION
END;
Procedure
PROCEDURE <name>
IS
BEGIN
-statements
EXCEPTION
END;
Function
FUNCTION <name>
RETURN <datatype>
IS
BEGIN
-statements
EXCEPTION
END;
 Scalar (char, varchar2, number, date, etc)
 Composite (%rowtype)
 Reference (pointers)
 LOB (large objects)
Note: Non PL/SQL variables include bind variables,
host (“global”) variables, and parameters.
 Two variables can have the same name if they are
in different blocks (bad idea)
 The variable name should not be the same as any
table column names used in the block.
 All variables must be declared before their use.
 The assignment statement
: =
is not the same as the equality operator
=
 All statements end with a ;
Variable g_inv_value number
DECLARE
v_price number(8,2) := 10.25;
v_quantity number(8,0) := 400;
BEGIN
:g_inv_value := v_price * v_quantity;
END;
/
Print g_inv_value
/
Set serveroutput on
DECLARE
v_inv_value number(10,2);
v_price number(8,2) := 10.25;
v_quantity number(8,0) := 400;
BEGIN
v_inv_value := v_price * v_quantity;
dbms_output.put('The value is: ');
dbms_output.put_line(v_inv_value);
END;
/
Set serveroutput on
Accept p_price Prompt 'Enter the Price: '
DECLARE
v_inv_value number(8,2);
v_price number(8,2);
v_quantity number(8,0) := 400;
BEGIN
v_price := &p_price;
v_inv_value := v_price * v_quantity;
dbms_output.put_line('******');
dbms_output.put_line('price * quantity=');
dbms_output.put_line(v_inv_value);
END;
/
Note: PL/SQL not designed for user interface programming
DECLARE
v_salary number(9,2) := 40000;
BEGIN
/* this is a multi-line comment that
will be ignored by the pl/sql
interpreter */
v_salary := v_salary * 2; -- nice raise
END; -- end of program
SET SERVEROUTPUT ON
DECLARE
v_max_gpa number(3,2);
v_numstudents number(4);
v_lname students.lname%type;
v_major students.major%type;
BEGIN
select max(gpa) into v_max_gpa
from students;
DBMS_OUTPUT.PUT_LINE ('The highest GPA is '||v_max_gpa);
select count(sid) into v_numstudents
from students
where gpa = v_max_gpa;
IF v_numstudents > 1 then
DBMS_OUTPUT.PUT_LINE ('There are '||v_numstudents||' with that GPA');
ELSE
select lname, major into v_lname, v_major
from students
where gpa=v_max_gpa;
DBMS_OUTPUT.PUT_LINE ('The student name is '||v_lname);
DBMS_OUTPUT.PUT_LINE ('The student major is '||v_major);
END IF;
END;
/
 CHR(asciivalue)
 ASCII(string)
 LOWER(string)
 SUBSTR(string,start,substrlength)
 LTRIM(string)
 RTRIM(string)
 LPAD(string_to_be_padded, spaces_to_pad, |string_to_pad_with|)
 RPAD(string_to_be_padded, spaces_to_pad, |string_to_pad_with|)
 REPLACE(string, searchstring, replacestring)
 UPPER(string)
 INITCAP(string)
 LENGTH(string)
 ABS(value)
 ROUND(value, precision)
 MOD(value,divisor)
 SQRT(value)
 TRUNC(value,|precision|)
 LEAST(exp1, exp2…)
 GREATEST(exp1, exp2…)
Set serveroutput on
DECLARE
v_student students%rowtype;
BEGIN
select * into v_student
from students
where sid='123456';
DBMS_OUTPUT.PUT_LINE (v_student.lname);
DBMS_OUTPUT.PUT_LINE (v_student.major);
DBMS_OUTPUT.PUT_LINE (v_student.gpa);
END;
/
 A cursor is a private set of records
 An Oracle Cursor = VB recordset = JDBC
ResultSet
 Implicit cursors are created for every query made
in Oracle
 Explicit cursors can be declared by a programmer
within PL/SQL.
 cursorname%ROWCOUNT Rows returned so far
 cursorname%FOUND One or more rows retrieved
 cursorname%NOTFOUND No rows found
 Cursorname%ISOPEN Is the cursor open
 Declare the cursor
 Open the cursor
 Fetch a row
 Test for end of cursor
 Close the cursor
Note: there is a FOR LOOP available with an implicit fetch
DECLARE
CURSOR students_cursor IS
SELECT * from students;
v_student students_cursor%rowtype;
/* instead we could do v_student students%rowtype */
BEGIN
DBMS_OUTPUT.PUT_LINE ('******************');
OPEN students_cursor;
FETCH students_cursor into v_student;
WHILE students_cursor%found LOOP
DBMS_OUTPUT.PUT_LINE (v_student.last);
DBMS_OUTPUT.PUT_LINE (v_student.major);
DBMS_OUTPUT.PUT_LINE ('******************');
FETCH students_cursor into v_student;
END LOOP;
CLOSE students_cursor;
END;
/
DECLARE
CURSOR students_cursor IS
SELECT last, major from students;
v_Last students.last%type;
v_major students.major%type;
BEGIN
DBMS_OUTPUT.PUT_LINE ('******************');
OPEN students_cursor;
FETCH students_cursor into v_last, v_major;
WHILE students_cursor%found LOOP
DBMS_OUTPUT.PUT_LINE (v_last);
DBMS_OUTPUT.PUT_LINE (v_major);
DBMS_OUTPUT.PUT_LINE ('******************');
FETCH students_cursor into v_last, v_major;
END LOOP;
CLOSE students_cursor;
END;
/
 When something is too complicated for SQL
 When conditional branching and looping are needed
 Example
 Write a PL/SQL program that assigns email address to each employee or
student in a table. Following these rules:
- email address should be all lower case
- email address should default to first initial plus the first seven letters of the last name
- email can be no longer than eight characters
- if email is already used than use first initial plus middle initial plus first
six letters of last name
- if the previous address is taken use the first two letters of the first name
and the first six letters of the last name.
- if the previous address is taken use first six letters of last name + 01 or 02 …etc
 PL/SQL code stored in the database and executed when called by the
user.
 Called by procedure name from another PL/SQL block or using EXECUTE
from SQL+. For example EXEC SQR(50)
 Example:
Create procedure SQR (v_num_to_square IN number)
AS
v_answer number(10);
BEGIN
v_answer := v_num_to_square * v_num_to_square;
dbms_output.put_line(v_answer);
END;
/
 PL/SQL user defined function stored in the database and executed
when a function call is made in code: example x := SQUARED(50)
 Example:
Create or Replace Function SQUARED
(p_number_to_square IN number)
RETURN number
IS
v_answer number(10);
BEGIN
v_answer := p_number_to_square * p_number_to_square;
RETURN(v_answer);
END;
/
Create or replace procedure mytabs
AS
CURSOR table_cursor IS
Select table_name from user_tables;
v_tablename varchar2(30);
BEGIN
open table_cursor;
fetch table_cursor into v_tablename;
while table_cursor%found loop
dbms_output.put_line(v_tablename);
fetch table_cursor into v_tablename;
end loop;
close table_cursor;
END;
 PL/SQL code executed automatically in response to a database event,
typically DML.
 Like other stored procedures, triggers are stored in the database.
 Often used to:
◦ enforce complex constraints, especially multi-table constraints. Financial
posting is an example of this.
◦ Trigger related actions
◦ implement auditing “logs”
◦ pop a sequence when creating token keys
 Triggers do not issue transaction control statements (such as commit).
Triggers are part of the SQL transaction that invoked them.
 USER_TRIGGERS provides a data dictionary view of triggers.
CREATE OR REPLACE TRIGGER <trigger_name>
[BEFORE/AFTER][DELETE/INSERT/UPDATE of <column_name |, column_name… |>
ON <table_name>
|FOR EACH ROW|
|WHEN <triggering condition>|
|DECLARE|
BEGIN
trigger statements
…………
END;
To delete a trigger use:
DROP TRIGGER <trigger_name>;
CREATE OR REPLACE TRIGGER LOGSTUDENTCHANGES
BEFORE INSERT OR DELETE OR UPDATE of Major ON STUDENTS
FOR EACH ROW
DECLARE
v_ChangeType CHAR(1);
v_sid varchar2(10);
BEGIN
IF INSERTING THEN
V_ChangeType := 'I';
v_sid := :new.sid;
ELSIF UPDATING THEN
V_ChangeType := 'U';
v_sid := :new.sid;
ELSE
V_ChangeType := 'D';
v_sid := :old.sid;
END IF;
INSERT INTO MAJ_AUDIT (change_type, changed_by, timestamp,
SID, old_major, new_major)
VALUES (v_ChangeType, USER, SYSDATE, v_sid, :old.major, :new.major);
END LOGSTUDENTCHANGES;
CREATE OR REPLACE TRIGGER UPPERCASE
BEFORE INSERT OR UPDATE ON STUDENTS
FOR EACH ROW
DECLARE
BEGIN
:new.lastname:=UPPER(:new.lastname);
:new.firstname:=UPPER(:new.firstname);
END UPPERCASE;
/
CREATE OR REPLACE TRIGGER SalaryTrig
BEFORE INSERT ON Employees
FOR EACH ROW
DECLARE
v_upper_sal_limit NUMBER(10,2);
v_lower_sal_limit NUMBER(10,2);
BEGIN
SELECT MIN(salary)*10 INTO v_upper_sal_limit
FROM employees;
SELECT MAX(salary)/10 INTO v_lower_sal_limit
FROM employees;
IF :new.salary NOT BETWEEN v_lower_sal_limit AND v_upper_sal_limit THEN
RAISE_APPLICATION_ERROR(-20001,'salary out of allowed range');
END IF;
END SalaryTrig;
/
Notes: Application error number is a parameter between –20,000 and –20,999.
You could also stop the insert by "poisoning" it, changing a :new
buffer value to one that you know will not pass constraint evaluation.
CREATE SEQUENCE <sequence_name>
|INCREMENT BY <number>|
|START WITH <start_value>|
|MAXVALUE <maximum_value>|NOMAXVALUE|
|MINVALUE <minimum_value>|
|CYCLE|NOCYLE|
|CACHE <number of values>|NOCACHE|
|ORDER|NOORDER|
To pop the next sequence use:
SEQUENCENAME.NEXTVAL (CURRVAL shows last pop)

More Related Content

What's hot

What's hot (20)

PL/SQL
PL/SQLPL/SQL
PL/SQL
 
Sql basics and DDL statements
Sql basics and DDL statementsSql basics and DDL statements
Sql basics and DDL statements
 
Writing Basic SQL SELECT Statements
Writing Basic SQL SELECT StatementsWriting Basic SQL SELECT Statements
Writing Basic SQL SELECT Statements
 
Plsql
PlsqlPlsql
Plsql
 
Unit 5 composite datatypes
Unit 5  composite datatypesUnit 5  composite datatypes
Unit 5 composite datatypes
 
set operators.pptx
set operators.pptxset operators.pptx
set operators.pptx
 
02 Writing Executable Statments
02 Writing Executable Statments02 Writing Executable Statments
02 Writing Executable Statments
 
1 - Introduction to PL/SQL
1 - Introduction to PL/SQL1 - Introduction to PL/SQL
1 - Introduction to PL/SQL
 
Sql select
Sql select Sql select
Sql select
 
Presentation slides of Sequence Query Language (SQL)
Presentation slides of Sequence Query Language (SQL)Presentation slides of Sequence Query Language (SQL)
Presentation slides of Sequence Query Language (SQL)
 
SQL Overview
SQL OverviewSQL Overview
SQL Overview
 
Oracle pl/sql control statments
Oracle pl/sql control statmentsOracle pl/sql control statments
Oracle pl/sql control statments
 
Packages in PL/SQL
Packages in PL/SQLPackages in PL/SQL
Packages in PL/SQL
 
Introduction to sql
Introduction to sqlIntroduction to sql
Introduction to sql
 
Basic SQL and History
 Basic SQL and History Basic SQL and History
Basic SQL and History
 
Sql joins
Sql joinsSql joins
Sql joins
 
MySQL for beginners
MySQL for beginnersMySQL for beginners
MySQL for beginners
 
Partitioning
PartitioningPartitioning
Partitioning
 
Sql(structured query language)
Sql(structured query language)Sql(structured query language)
Sql(structured query language)
 
5. stored procedure and functions
5. stored procedure and functions5. stored procedure and functions
5. stored procedure and functions
 

Viewers also liked (10)

Windows7technicianjun
Windows7technicianjunWindows7technicianjun
Windows7technicianjun
 
Apache hadoop basics
Apache hadoop basicsApache hadoop basics
Apache hadoop basics
 
Reject the reformation, reap the revolution
Reject the reformation, reap the revolutionReject the reformation, reap the revolution
Reject the reformation, reap the revolution
 
Presentation1
Presentation1Presentation1
Presentation1
 
Cloud computing simplified...
Cloud computing simplified...Cloud computing simplified...
Cloud computing simplified...
 
Agile project management
Agile project managementAgile project management
Agile project management
 
Pipelining
PipeliningPipelining
Pipelining
 
Animation
AnimationAnimation
Animation
 
Intranet mailing system
Intranet mailing systemIntranet mailing system
Intranet mailing system
 
Cisco ERP Implementation
Cisco ERP ImplementationCisco ERP Implementation
Cisco ERP Implementation
 

Similar to PLSQL

L9 l10 server side programming
L9 l10  server side programmingL9 l10  server side programming
L9 l10 server side programming
Rushdi Shams
 
PLSQLmy Updated (1).pptx
PLSQLmy Updated (1).pptxPLSQLmy Updated (1).pptx
PLSQLmy Updated (1).pptx
vamsiyadav39
 
Unit 3(rdbms)
Unit 3(rdbms)Unit 3(rdbms)
Unit 3(rdbms)
Jay Patel
 
Unit 3(rdbms)
Unit 3(rdbms)Unit 3(rdbms)
Unit 3(rdbms)
Jay Patel
 
Mysqlppt
MysqlpptMysqlppt
Mysqlppt
Reka
 

Similar to PLSQL (20)

SQL- Introduction to PL/SQL
SQL- Introduction to  PL/SQLSQL- Introduction to  PL/SQL
SQL- Introduction to PL/SQL
 
L9 l10 server side programming
L9 l10  server side programmingL9 l10  server side programming
L9 l10 server side programming
 
Open Gurukul Language PL/SQL
Open Gurukul Language PL/SQLOpen Gurukul Language PL/SQL
Open Gurukul Language PL/SQL
 
Module04
Module04Module04
Module04
 
Dynamic websites lec3
Dynamic websites lec3Dynamic websites lec3
Dynamic websites lec3
 
PL-SQL.pdf
PL-SQL.pdfPL-SQL.pdf
PL-SQL.pdf
 
Procedures/functions of rdbms
Procedures/functions of rdbmsProcedures/functions of rdbms
Procedures/functions of rdbms
 
plsql.ppt
plsql.pptplsql.ppt
plsql.ppt
 
Oracle - Program with PL/SQL - Lession 09
Oracle - Program with PL/SQL - Lession 09Oracle - Program with PL/SQL - Lession 09
Oracle - Program with PL/SQL - Lession 09
 
Tony jambu (obscure) tools of the trade for tuning oracle sq ls
Tony jambu   (obscure) tools of the trade for tuning oracle sq lsTony jambu   (obscure) tools of the trade for tuning oracle sq ls
Tony jambu (obscure) tools of the trade for tuning oracle sq ls
 
PLSQLmy Updated (1).pptx
PLSQLmy Updated (1).pptxPLSQLmy Updated (1).pptx
PLSQLmy Updated (1).pptx
 
PLSQL.pptx
PLSQL.pptxPLSQL.pptx
PLSQL.pptx
 
Relational Database Management System
Relational Database Management SystemRelational Database Management System
Relational Database Management System
 
Procedure n functions
Procedure n functionsProcedure n functions
Procedure n functions
 
Unit 3
Unit 3Unit 3
Unit 3
 
Unit 3(rdbms)
Unit 3(rdbms)Unit 3(rdbms)
Unit 3(rdbms)
 
Unit 3(rdbms)
Unit 3(rdbms)Unit 3(rdbms)
Unit 3(rdbms)
 
SQL / PL
SQL / PLSQL / PL
SQL / PL
 
Mysqlppt
MysqlpptMysqlppt
Mysqlppt
 
4. plsql 1
4. plsql 14. plsql 1
4. plsql 1
 

Recently uploaded

Standard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power PlayStandard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power Play
Epec Engineered Technologies
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ssuser89054b
 
Integrated Test Rig For HTFE-25 - Neometrix
Integrated Test Rig For HTFE-25 - NeometrixIntegrated Test Rig For HTFE-25 - Neometrix
Integrated Test Rig For HTFE-25 - Neometrix
Neometrix_Engineering_Pvt_Ltd
 
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
dharasingh5698
 
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
amitlee9823
 

Recently uploaded (20)

Minimum and Maximum Modes of microprocessor 8086
Minimum and Maximum Modes of microprocessor 8086Minimum and Maximum Modes of microprocessor 8086
Minimum and Maximum Modes of microprocessor 8086
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdf
 
Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024
 
Standard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power PlayStandard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power Play
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
Integrated Test Rig For HTFE-25 - Neometrix
Integrated Test Rig For HTFE-25 - NeometrixIntegrated Test Rig For HTFE-25 - Neometrix
Integrated Test Rig For HTFE-25 - Neometrix
 
chapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringchapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineering
 
Unit 2- Effective stress & Permeability.pdf
Unit 2- Effective stress & Permeability.pdfUnit 2- Effective stress & Permeability.pdf
Unit 2- Effective stress & Permeability.pdf
 
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
 
2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projects2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projects
 
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
 
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
 
DC MACHINE-Motoring and generation, Armature circuit equation
DC MACHINE-Motoring and generation, Armature circuit equationDC MACHINE-Motoring and generation, Armature circuit equation
DC MACHINE-Motoring and generation, Armature circuit equation
 
Thermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptThermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.ppt
 
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
 
22-prompt engineering noted slide shown.pdf
22-prompt engineering noted slide shown.pdf22-prompt engineering noted slide shown.pdf
22-prompt engineering noted slide shown.pdf
 
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
 
A Study of Urban Area Plan for Pabna Municipality
A Study of Urban Area Plan for Pabna MunicipalityA Study of Urban Area Plan for Pabna Municipality
A Study of Urban Area Plan for Pabna Municipality
 
Double Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueDouble Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torque
 

PLSQL

  • 1.
  • 2.  Procedural Language – SQL  An extension to SQL with design features of programming languages (procedural and object oriented)  PL/SQL and Java are both supported as internal host languages within Oracle products.
  • 3.  Acts as host language for stored procedures and triggers.  Provides the ability to add middle tier business logic to client/server applications.  Provides Portability of code from one environment to another  Improves performance of multi-query transactions.  Provides error handling
  • 4. DECLARE (optional) - variable declarations BEGIN (required) - SQL statements - PL/SQL statements or sub-blocks EXCEPTION (optional) - actions to perform when errors occur END; (required)
  • 6.  Scalar (char, varchar2, number, date, etc)  Composite (%rowtype)  Reference (pointers)  LOB (large objects) Note: Non PL/SQL variables include bind variables, host (“global”) variables, and parameters.
  • 7.  Two variables can have the same name if they are in different blocks (bad idea)  The variable name should not be the same as any table column names used in the block.
  • 8.  All variables must be declared before their use.  The assignment statement : = is not the same as the equality operator =  All statements end with a ;
  • 9. Variable g_inv_value number DECLARE v_price number(8,2) := 10.25; v_quantity number(8,0) := 400; BEGIN :g_inv_value := v_price * v_quantity; END; / Print g_inv_value /
  • 10. Set serveroutput on DECLARE v_inv_value number(10,2); v_price number(8,2) := 10.25; v_quantity number(8,0) := 400; BEGIN v_inv_value := v_price * v_quantity; dbms_output.put('The value is: '); dbms_output.put_line(v_inv_value); END; /
  • 11. Set serveroutput on Accept p_price Prompt 'Enter the Price: ' DECLARE v_inv_value number(8,2); v_price number(8,2); v_quantity number(8,0) := 400; BEGIN v_price := &p_price; v_inv_value := v_price * v_quantity; dbms_output.put_line('******'); dbms_output.put_line('price * quantity='); dbms_output.put_line(v_inv_value); END; / Note: PL/SQL not designed for user interface programming
  • 12. DECLARE v_salary number(9,2) := 40000; BEGIN /* this is a multi-line comment that will be ignored by the pl/sql interpreter */ v_salary := v_salary * 2; -- nice raise END; -- end of program
  • 13. SET SERVEROUTPUT ON DECLARE v_max_gpa number(3,2); v_numstudents number(4); v_lname students.lname%type; v_major students.major%type; BEGIN select max(gpa) into v_max_gpa from students; DBMS_OUTPUT.PUT_LINE ('The highest GPA is '||v_max_gpa); select count(sid) into v_numstudents from students where gpa = v_max_gpa; IF v_numstudents > 1 then DBMS_OUTPUT.PUT_LINE ('There are '||v_numstudents||' with that GPA'); ELSE select lname, major into v_lname, v_major from students where gpa=v_max_gpa; DBMS_OUTPUT.PUT_LINE ('The student name is '||v_lname); DBMS_OUTPUT.PUT_LINE ('The student major is '||v_major); END IF; END; /
  • 14.  CHR(asciivalue)  ASCII(string)  LOWER(string)  SUBSTR(string,start,substrlength)  LTRIM(string)  RTRIM(string)  LPAD(string_to_be_padded, spaces_to_pad, |string_to_pad_with|)  RPAD(string_to_be_padded, spaces_to_pad, |string_to_pad_with|)  REPLACE(string, searchstring, replacestring)  UPPER(string)  INITCAP(string)  LENGTH(string)
  • 15.  ABS(value)  ROUND(value, precision)  MOD(value,divisor)  SQRT(value)  TRUNC(value,|precision|)  LEAST(exp1, exp2…)  GREATEST(exp1, exp2…)
  • 16. Set serveroutput on DECLARE v_student students%rowtype; BEGIN select * into v_student from students where sid='123456'; DBMS_OUTPUT.PUT_LINE (v_student.lname); DBMS_OUTPUT.PUT_LINE (v_student.major); DBMS_OUTPUT.PUT_LINE (v_student.gpa); END; /
  • 17.  A cursor is a private set of records  An Oracle Cursor = VB recordset = JDBC ResultSet  Implicit cursors are created for every query made in Oracle  Explicit cursors can be declared by a programmer within PL/SQL.
  • 18.  cursorname%ROWCOUNT Rows returned so far  cursorname%FOUND One or more rows retrieved  cursorname%NOTFOUND No rows found  Cursorname%ISOPEN Is the cursor open
  • 19.  Declare the cursor  Open the cursor  Fetch a row  Test for end of cursor  Close the cursor Note: there is a FOR LOOP available with an implicit fetch
  • 20. DECLARE CURSOR students_cursor IS SELECT * from students; v_student students_cursor%rowtype; /* instead we could do v_student students%rowtype */ BEGIN DBMS_OUTPUT.PUT_LINE ('******************'); OPEN students_cursor; FETCH students_cursor into v_student; WHILE students_cursor%found LOOP DBMS_OUTPUT.PUT_LINE (v_student.last); DBMS_OUTPUT.PUT_LINE (v_student.major); DBMS_OUTPUT.PUT_LINE ('******************'); FETCH students_cursor into v_student; END LOOP; CLOSE students_cursor; END; /
  • 21. DECLARE CURSOR students_cursor IS SELECT last, major from students; v_Last students.last%type; v_major students.major%type; BEGIN DBMS_OUTPUT.PUT_LINE ('******************'); OPEN students_cursor; FETCH students_cursor into v_last, v_major; WHILE students_cursor%found LOOP DBMS_OUTPUT.PUT_LINE (v_last); DBMS_OUTPUT.PUT_LINE (v_major); DBMS_OUTPUT.PUT_LINE ('******************'); FETCH students_cursor into v_last, v_major; END LOOP; CLOSE students_cursor; END; /
  • 22.  When something is too complicated for SQL  When conditional branching and looping are needed  Example  Write a PL/SQL program that assigns email address to each employee or student in a table. Following these rules: - email address should be all lower case - email address should default to first initial plus the first seven letters of the last name - email can be no longer than eight characters - if email is already used than use first initial plus middle initial plus first six letters of last name - if the previous address is taken use the first two letters of the first name and the first six letters of the last name. - if the previous address is taken use first six letters of last name + 01 or 02 …etc
  • 23.  PL/SQL code stored in the database and executed when called by the user.  Called by procedure name from another PL/SQL block or using EXECUTE from SQL+. For example EXEC SQR(50)  Example: Create procedure SQR (v_num_to_square IN number) AS v_answer number(10); BEGIN v_answer := v_num_to_square * v_num_to_square; dbms_output.put_line(v_answer); END; /
  • 24.  PL/SQL user defined function stored in the database and executed when a function call is made in code: example x := SQUARED(50)  Example: Create or Replace Function SQUARED (p_number_to_square IN number) RETURN number IS v_answer number(10); BEGIN v_answer := p_number_to_square * p_number_to_square; RETURN(v_answer); END; /
  • 25. Create or replace procedure mytabs AS CURSOR table_cursor IS Select table_name from user_tables; v_tablename varchar2(30); BEGIN open table_cursor; fetch table_cursor into v_tablename; while table_cursor%found loop dbms_output.put_line(v_tablename); fetch table_cursor into v_tablename; end loop; close table_cursor; END;
  • 26.  PL/SQL code executed automatically in response to a database event, typically DML.  Like other stored procedures, triggers are stored in the database.  Often used to: ◦ enforce complex constraints, especially multi-table constraints. Financial posting is an example of this. ◦ Trigger related actions ◦ implement auditing “logs” ◦ pop a sequence when creating token keys  Triggers do not issue transaction control statements (such as commit). Triggers are part of the SQL transaction that invoked them.  USER_TRIGGERS provides a data dictionary view of triggers.
  • 27. CREATE OR REPLACE TRIGGER <trigger_name> [BEFORE/AFTER][DELETE/INSERT/UPDATE of <column_name |, column_name… |> ON <table_name> |FOR EACH ROW| |WHEN <triggering condition>| |DECLARE| BEGIN trigger statements ………… END; To delete a trigger use: DROP TRIGGER <trigger_name>;
  • 28. CREATE OR REPLACE TRIGGER LOGSTUDENTCHANGES BEFORE INSERT OR DELETE OR UPDATE of Major ON STUDENTS FOR EACH ROW DECLARE v_ChangeType CHAR(1); v_sid varchar2(10); BEGIN IF INSERTING THEN V_ChangeType := 'I'; v_sid := :new.sid; ELSIF UPDATING THEN V_ChangeType := 'U'; v_sid := :new.sid; ELSE V_ChangeType := 'D'; v_sid := :old.sid; END IF; INSERT INTO MAJ_AUDIT (change_type, changed_by, timestamp, SID, old_major, new_major) VALUES (v_ChangeType, USER, SYSDATE, v_sid, :old.major, :new.major); END LOGSTUDENTCHANGES;
  • 29. CREATE OR REPLACE TRIGGER UPPERCASE BEFORE INSERT OR UPDATE ON STUDENTS FOR EACH ROW DECLARE BEGIN :new.lastname:=UPPER(:new.lastname); :new.firstname:=UPPER(:new.firstname); END UPPERCASE; /
  • 30. CREATE OR REPLACE TRIGGER SalaryTrig BEFORE INSERT ON Employees FOR EACH ROW DECLARE v_upper_sal_limit NUMBER(10,2); v_lower_sal_limit NUMBER(10,2); BEGIN SELECT MIN(salary)*10 INTO v_upper_sal_limit FROM employees; SELECT MAX(salary)/10 INTO v_lower_sal_limit FROM employees; IF :new.salary NOT BETWEEN v_lower_sal_limit AND v_upper_sal_limit THEN RAISE_APPLICATION_ERROR(-20001,'salary out of allowed range'); END IF; END SalaryTrig; / Notes: Application error number is a parameter between –20,000 and –20,999. You could also stop the insert by "poisoning" it, changing a :new buffer value to one that you know will not pass constraint evaluation.
  • 31. CREATE SEQUENCE <sequence_name> |INCREMENT BY <number>| |START WITH <start_value>| |MAXVALUE <maximum_value>|NOMAXVALUE| |MINVALUE <minimum_value>| |CYCLE|NOCYLE| |CACHE <number of values>|NOCACHE| |ORDER|NOORDER| To pop the next sequence use: SEQUENCENAME.NEXTVAL (CURRVAL shows last pop)