0% found this document useful (0 votes)
17 views21 pages

SQL Application Code & Procedures

Uploaded by

indu.verma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views21 pages

SQL Application Code & Procedures

Uploaded by

indu.verma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd

Database Application

Development

CSC343 – Introduction to databases – A. Vaisman


Overview

Concepts:
 SQL in application code
 Embedded SQL
 Cursors
 Dynamic SQL
 Stored procedures

CSC343 – Introduction to databases – A. Vaisman


SQL in Application Code
 SQL commands can be called from within a
host language (e.g., C++ or Java) program.
 SQL statements can refer to host variables
(including special variables used to return
status).
 Must include a statement to connect to the right
database.
 Two main integration approaches:
 Embed SQL in the host language (Embedded
SQL, SQLJ)
 Create special API to call SQL commands (JDBC)

CSC343 – Introduction to databases – A. Vaisman


SQL in Application Code
(Contd.)
Impedance mismatch:
 SQL relations are (multi-) sets of
records, with no a priori bound on the
number of records. No such data
structure exist traditionally in
procedural programming languages
such as C or C++.
 SQL supports a mechanism called a
cursor to handle this.

CSC343 – Introduction to databases – A. Vaisman


Overview

Concepts:
 SQL in application code
 Embedded SQL
 Cursors
 Dynamic SQL
 Stored procedures

CSC343 – Introduction to databases – A. Vaisman


Embedded SQL
 Approach: Embed SQL in the host
language.
 A preprocessor converts the SQL statements
into special API calls.
 Then a regular compiler is used to compile
the code.

 Language constructs:
 Connecting to a database:
EXEC SQL CONNECT
 Declaring variables:
EXEC SQL BEGIN (END) DECLARE SECTION
 Statements:
EXEC SQL Statement
CSC343 – Introduction to databases – A. Vaisman
Embedded SQL: Variables
In the host program:

EXEC SQL BEGIN DECLARE SECTION


char c_sname[20];
long c_sid;
short c_rating;
float c_age;
EXEC SQL END DECLARE SECTION

 Two special “error” variables:


 SQLCODE (long, is negative if an error has occurred)
 SQLSTATE (char[6], predefined codes for common errors)

CSC343 – Introduction to databases – A. Vaisman


Overview

Concepts:
 SQL in application code
 Embedded SQL
 Cursors
 Stored procedures

CSC343 – Introduction to databases – A. Vaisman


Cursors
 Can declare a cursor on a relation or query
statement (which generates a relation).
 Can open a cursor, and repeatedly fetch a
tuple then move the cursor, until all tuples
have been retrieved.
 Can use the ORDER BY clause, in queries that are
accessed through a cursor, to control the order in
which tuples are returned.
• Fields in ORDER BY clause must also appear in SELECT
clause.
 Can also modify/delete tuple pointed to by a
cursor.
CSC343 – Introduction to databases – A. Vaisman
Cursor that gets names of
sailors who’ve reserved a red
boat, in alphabetical order
EXEC SQL DECLARE sinfo CURSOR FOR
SELECT S.sname
FROM Sailors S, Boats B, Reserves R
WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘red’
ORDER BY S.sname

CSC343 – Introduction to databases – A. Vaisman 1


Embedding SQL in C: An
Example
char SQLSTATE[6];
EXEC SQL BEGIN DECLARE SECTION ;(=>declare section)
char c_sname[20]; short c_minrating; float c_age;
EXEC SQL END DECLARE SECTION
c_minrating = random();
EXEC SQL DECLARE sinfo CURSOR FOR ;(=>declare section)
SELECT S.sname, S.age
FROM Sailors S
WHERE S.rating > :c_minrating
ORDER BY S.sname;
EXEC SQL OPEN CURSOR sinfo ;(=>statement)
do {
EXEC SQL FETCH sinfo INTO :c_sname, :c_age;(=>statement)
printf(“%s is %d years old\n”, c_sname, c_age);
} while (SQLSTATE != ‘02000’);
EXEC SQL CLOSE sinfo; ;(=>statement)

CSC343 – Introduction to databases – A. Vaisman 1


Overview

Concepts:
 SQL in application code
 Embedded SQL
 Cursors
 Dynamic SQL
 Stored procedures

CSC343 – Introduction to databases – A. Vaisman 1


Dynamic SQL

 SQL query strings are now always known at


compile time (e.g., spreadsheet, graphical
DBMS frontend): allow construction of SQL
statements on-the-fly.
Example:
EXEC SQL BEGIN DECLARE SECTION
char c_sqlstring[]=
{“DELETE FROM Sailors WHERE raiting>5”};
EXEC SQL END DECLARE SECTION
EXEC SQL PREPARE readytogo FROM :c_sqlstring;
EXEC SQL EXECUTE readytogo;

CSC343 – Introduction to databases – A. Vaisman 1


Stored Procedures

 What is a stored procedure:


 Program executed through a single SQL
statement
 Executed in the process space of the server
 Advantages:
 Can encapsulate application logic while
staying “close” to the data
 Reuse of application logic by different users
 Avoid tuple-at-a-time return of records
through cursors

CSC343 – Introduction to databases – A. Vaisman 1


Stored Procedures: Examples
CREATE PROCEDURE ShowNumReservations
SELECT S.sid, S.sname, COUNT(*)
FROM Sailors S, Reserves R
WHERE S.sid = R.sid
GROUP BY S.sid, S.sname

Stored procedures can have parameters:


 Three different modes: IN, OUT, INOUT

CREATE PROCEDURE IncreaseRating(


IN sailor_sid INTEGER, IN increase INTEGER)
UPDATE Sailors
SET rating = rating + increase
WHERE sid = sailor_sid

CSC343 – Introduction to databases – A. Vaisman 1


Stored Procedures: Examples
(Contd.)
Stored procedure do not have to be
written in SQL:

CREATE PROCEDURE TopSailors(


IN num INTEGER)
LANGUAGE JAVA
EXTERNAL NAME “file:///c:/storedProcs/rank.jar”

CSC343 – Introduction to databases – A. Vaisman 1


Calling Stored Procedures

EXEC SQL BEGIN DECLARE SECTION


Int sid;
Int rating;
EXEC SQL END DECLARE SECTION

// now increase the rating of this sailor


EXEC CALL IncreaseRating(:sid,:rating);

CSC343 – Introduction to databases – A. Vaisman 1


Calling Stored Procedures
(Contd.)
JDBC: SQLJ:
CallableStatement #sql iterator
cstmt= ShowSailors(…);
con.prepareCall(“{call
ShowSailors showsailors;
ShowSailors});
#sql showsailors={CALL
ResultSet rs =
ShowSailors};
cstmt.executeQuery();
while (rs.next()) { while
(showsailors.next()) {


}
}

CSC343 – Introduction to databases – A. Vaisman 1


SQL/PSM
Most DBMSs allow users to write stored procedures
in a simple, general-purpose language (close to
SQL)  SQL/PSM standard is a representative

Declare a stored procedure:


CREATE PROCEDURE name(p1, p2, …, pn)
local variable declarations
procedure code;
Declare a function:
CREATE FUNCTION name (p1, …, pn) RETURNS
sqlDataType
local variable declarations
function code;

CSC343 – Introduction to databases – A. Vaisman 1


Main SQL/PSM Constructs
CREATE FUNCTION rate Sailor
(IN sailorId INTEGER)
RETURNS INTEGER
DECLARE rating INTEGER
DECLARE numRes INTEGER
SET numRes = (SELECT COUNT(*)
FROM Reserves R
WHERE R.sid = sailorId)
IF (numRes > 10) THEN rating =1;
ELSE rating = 0;
END IF;
RETURN rating;

CSC343 – Introduction to databases – A. Vaisman 2


Main SQL/PSM Constructs
(Contd.)
 Local variables (DECLARE)
 RETURN values for FUNCTION
 Assign variables with SET
 Branches and loops:
 IF (condition) THEN statements;
ELSEIF (condition) statements;
… ELSE statements; END IF;
 LOOP statements; END LOOP
 Queries can be parts of expressions
 Can use cursors naturally without “EXEC SQL”

CSC343 – Introduction to databases – A. Vaisman 2

You might also like