Professional Documents
Culture Documents
Procedure and Function: IF-2213 Pemrograman Basis Data Tahun Ajaran 2012-2013
Procedure and Function: IF-2213 Pemrograman Basis Data Tahun Ajaran 2012-2013
1
05/07/20
Bagian 1
2
05/07/20
SQL/PSM
• stands for Structured Query Language/Persistent Stored Modules
• was developed by the American National Standards Institute
(ANSI) as an extension to SQL
• first adopted in 1996
• provides procedural programmability in addition to the querying
commands of SQL
• standardizes procedural extensions for SQL, including flow of
control, condition handling, statement condition signals and
resignals, cursors and local variables, and assignment of
expressions to variables and parameters
• formalizes declaration and maintenance of persistent database
language routines (e.g., "stored procedures").
• In PSM, we define modules, which are collections of function and
procedure definitions, temporary relation declarations, and several
other optional declarations.
3
05/07/20
PL/SQL
• Procedural Language/Structured Query Language
• Oracle Corporation's procedural extension language for SQL and
the Oracle relational database
4
05/07/20
Basic Syntax Procedure in PL/SQL
5
05/07/20
Basic Syntax Function in PL/SQL
6
05/07/20
Parameters
• The parameters in a procedure are preceded by a "mode," which
is either IN, OUT or INOUT
– IN – the parameter is input-only
– OUT – the parameter is output-only
– INOUT – the parameter is input and output
• The parameters in a function may only be of mode IN
7
05/07/20
Variables
• The major datatypes in PL/SQL include NUMBER, INTEGER,
CHAR, VARCHAR2, DATE, TIMESTAMP.
– variable_name NUMBER(P[,S]) := VALUE;
– variable_name VARCHAR2(L) := 'Text';
– variable_name DATE := '01-Jan-2005';
• TO_DATE('31-12-2004','dd-mm-yyyy')
• TO_CHAR (date_string, format_string)
– variable_name Table_name.Column_name%type;
8
05/07/20
Example
CREATE OR REPLACE PROCEDURE AddNewStar (
p_Name IN MovieStar.name%TYPE,
p_BirthPlace IN MovieStar.birthPlace%TYPE,
p_Gender IN MovieStar.gender%TYPE,
p_BirthDate IN MovieStar.birthDate%TYPE) AS
BEGIN
INSERT INTO MovieStar (name,birthPlace,gender,birthDate)
VALUES (p_Name,p_BirthPlace,p_Gender,p_BirthDate);
END AddNewStar;
9
05/07/20
Example
CREATE OR REPLACE PROCEDURE ChangeAddress (
p_name IN Studio.name%TYPE,
p_address IN Studio.address%TYPE) AS
BEGIN
UPDATE Studio
SET adress = p_address
WHERE name = p_name;
END ChangeAddress;
10
05/07/20
Example
CREATE OR REPLACE FUNCTION After50s (
p_Title IN Movie.title%TYPE) RETURN VARCHAR2 AS
v_Year Movie.year%TYPE;
BEGIN
SELECT year INTO v_Year FROM Movie
WHERE title = p_Title;
RETURN v_Year;
END After50s;
11
05/07/20
Conditional Statements
IF <condition> THEN
<statement list>
ELSIF <condition> THEN
<statement list>
ELSIF
.......
ELSE <statement list >
END IF;
12
05/07/20
Conditional Statements
CASE
WHEN <condition> THEN <statement list>
WHEN <condition> THEN <statement list>
....
ELSE <statement list>
END CASE;
13
05/07/20
Example
CREATE OR REPLACE FUNCTION After50s (
p_Title IN Movie.title%TYPE) RETURN VARCHAR2 AS
v_Year Movie.year%TYPE;
BEGIN
SELECT year INTO v_Year FROM Movie
WHERE title = p_Title;
IF v_Year<1950 THEN
RETURN ‘No’;
ELSE
RETURN ‘Yes’;
END IF;
END After50s;
14
05/07/20
Dropping Procedures and Functions
• The syntax for dropping a procedure is
DROP PROCEDURE procedure_name;
• and the syntax for dropping a function is
DROP FUNCTION function_name;
15
05/07/20
The CALL Statement
Example:
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE(After50s(‘Se7en’));
3 END;
4 /
Yes
16
05/07/20
Bagian 2
17
05/07/20
Exceptions Raised Inside Subprograms
EXCEPTION
WHEN exception1 [OR exception2 . . .] THEN
<statement list>
[WHEN exception3 [OR exception4. . .] THEN
<statement list>]
[WHEN OTHERS THEN
<statement list>]
18
05/07/20
Example
CREATE OR REPLACE PROCEDURE RaiseSalary (
p_cert# IN MovieExec.cert#%TYPE,
p_percent IN NUMBER) AS
BEGIN
UPDATE MovieExec
SET netWorth = netWorth * (1 + p_percent/100)
WHERE cert# = p_cert#;
END RaiseSalary;
19
05/07/20
Example
CREATE OR REPLACE PROCEDURE RaiseSalary (
p_cert# IN MovieExec.cert#%TYPE, p_percent IN NUMBER) AS
e_toomuch EXCEPTION;
BEGIN
IF p_percent >= 0.30 THEN
RAISE e_toomuch;
END IF;
UPDATE MovieExec
SET netWorth = netWorth * (1 + p_percent/100)
WHERE cert# = p_cert#;
EXCEPTION
WHEN e_toomuch THEN
DBMS_OUTPUT.PUT_LINE('Amount is too high.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: raise not processed.');
END RaiseSalary;
20
05/07/20
Oracle Standard Exception
21
05/07/20
Oracle Standard Exception
22
same primary key.
05/07/20
Example
CREATE OR REPLACE PROCEDURE StarMovie (
p_Birthdate IN MovieStar.birthdate%TYPE) AS
BEGIN
SELECT name FROM MovieStar
WHERE birthdate = p_Birthdate;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘No movie star born.');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE(‘More than one
moviestar born.');
END StarMovie;
23