69
Introduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University www.cs.aau.dk/˜torp [email protected] December 2, 2011 daisy.aau.dk Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 1 / 56

Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University [email protected] December

  • Upload
    donhi

  • View
    227

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Introduction to PL/SQL

Kristian Torp

Department of Computer ScienceAalborg University

www.cs.aau.dk/˜[email protected]

December 2, 2011

daisy.aau.dk

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 1 / 56

Page 2: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Outline

1 Introduction

2 Stored ProceduresAn OverviewData TypesParameter ParsingCursors

3 PackagesCase Study: Table API

4 Summary

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 2 / 56

Page 3: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Outline

1 Introduction

2 Stored ProceduresAn OverviewData TypesParameter ParsingCursors

3 PackagesCase Study: Table API

4 Summary

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 3 / 56

Page 4: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Learning Outcomes

Learning OutcomesUnderstand how code can be executed within a DBMS

Be able to design stored procedures in general

Be able to construct and execute stored procedures on Oracle

Knowledge about the pros and cons of stored procedures

Note ThatConcepts are fairly DBMS independent

All code examples are Oracle specific

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 4 / 56

Page 5: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Prerequisites

SQLKnowledge about the SQL select statement

Knowledge about SQL modification statements, e.g., insert and delete

Knowledge about transaction management, e.g., commit and rollback

Knowledge about tables, views, and integrity constraints

Procedural Programming LanguageKnowledge about another programming language of the C family

Knowledge about data types, e.g., int, long, string, and Boolean

Knowledge of control structures, e.g., if, while, for, and case

Knowledge of functions, procedures, parameters, and return values

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 5 / 56

Page 6: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Motivation

PurposeMove processing into the DBMS from client programs (databaseapplications)

AdvantagesCode accessible to all applications

I Access from different programming languages

Very efficient for data intensive processingI Process large data set, small result returned

Enhance the security of database applicationsI Avoid SQL injection attackshttp://en.wikipedia.org/wiki/SQL_injection

Missing StandardUnfortunately, the major DBMS vendors each have their own SQL dialect

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 6 / 56

Page 7: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Motivation

PurposeMove processing into the DBMS from client programs (databaseapplications)

AdvantagesCode accessible to all applications

I Access from different programming languages

Very efficient for data intensive processingI Process large data set, small result returned

Enhance the security of database applicationsI Avoid SQL injection attackshttp://en.wikipedia.org/wiki/SQL_injection

Missing StandardUnfortunately, the major DBMS vendors each have their own SQL dialect

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 6 / 56

Page 8: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Overview

FunctionalitySQL extended with control structures

I Control structures like if and loop statements

Used forI Stored procedures (and functions)I Package (Oracle specific)I TriggersI Types a.k.a. classes (Oracle specific)

In very widely used in the industryI see http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

In the SQL standard called SQL/PSMI PSM = Persistent Storage Model

FocusThe focus is here on stored procedures and packages!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 7 / 56

Page 9: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Outline

1 Introduction

2 Stored ProceduresAn OverviewData TypesParameter ParsingCursors

3 PackagesCase Study: Table API

4 Summary

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 8 / 56

Page 10: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Motivation for Stored Procedures

The Big Four BenefitsAbstraction

I Increases readability

Implementation hidingI Can change internals without effecting clients

Modular programsI More manageable and easier to understand

LibraryI Reuse, reuse, and reuse!

NoteThis is not different from any other procedural programming language!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 9 / 56

Page 11: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Outline

1 Introduction

2 Stored ProceduresAn OverviewData TypesParameter ParsingCursors

3 PackagesCase Study: Table API

4 Summary

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 10 / 56

Page 12: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

A Procedure: Hello, World!

Example (The Start Program)create or rep lace procedure h e l l o w o r l d i sbegin

dbms output . p u t l i n e ( ’ Hel lo , World ! ’ ) ;end ;

NoteIt is a procedure, i.e., not a function

I Both a procedure and a function is called a stored procedure

It is a begin and end language, not curly brackets: { and }It uses a built-in library dbms output.put line

I The package dbms output has the procedure put lineI Uses the dot notation for invoking functions myPackage.myProcedure

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 11 / 56

Page 13: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

A Function: Calculating Your BMIExample (A BMI Function)create or rep lace f u n c t i o n bmi ( he igh t i n t , weight f l o a t )r e t u r n f l o a t i sbegin

i f he igh t <= 0.3 or he igh t > 3.0 thendbms output . p u t l i n e ( ’ he igh t must be i n [ 0 . 3 , 3 . 0 ] meters ’ ) ;

end i f ;i f weight <= 0 then

dbms output . p u t l i n e ( ’ weight must be p o s i t i v e ’ ) ;e l s i f weight > 500 then

dbms output . p u t l i n e ( ’No human ’ ’ s weight i s 500 kg ’ ) ;end i f ;r e t u r n weight / he igh t ∗∗2;

end ;

NoteIt takes two parameters height and weight

It is a function, i.e., has a return statement

It is strongly typed language, i.e., parameters and the return value

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 12 / 56

Page 14: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Executing Stored Procedures

Example (Execute on Oracle server)−− to enable output from the serverSQL>set se rverou tpu t on

−− execute the procedureSQL>execute h e l l o w o r l d ;

−− execute the f u n c t i o nSQL>exec bmi (1 .87 , 90 ) ;−− r e s u l t s i n an er ro r , value re turned by f u n c t i o n must be used !

−− Wrap the f u n c t i o n c a l lSQL>exec dbms output . p u t l i n e ( bmi (1 .87 , 9 0 ) ) ;

NoteOutput from server is not enabled by default in a session!

Return value of a function cannot be ignored!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 13 / 56

Page 15: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Executing Stored Procedures

Example (Execute on Oracle server)−− to enable output from the serverSQL>set se rverou tpu t on

−− execute the procedureSQL>execute h e l l o w o r l d ;

−− execute the f u n c t i o nSQL>exec bmi (1 .87 , 90 ) ;−− r e s u l t s i n an er ro r , value re turned by f u n c t i o n must be used !

−− Wrap the f u n c t i o n c a l lSQL>exec dbms output . p u t l i n e ( bmi (1 .87 , 9 0 ) ) ;

NoteOutput from server is not enabled by default in a session!

Return value of a function cannot be ignored!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 13 / 56

Page 16: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Executing Stored Procedures

Example (Execute on Oracle server)−− to enable output from the serverSQL>set se rverou tpu t on

−− execute the procedureSQL>execute h e l l o w o r l d ;

−− execute the f u n c t i o nSQL>exec bmi (1 .87 , 90 ) ;−− r e s u l t s i n an er ro r , value re turned by f u n c t i o n must be used !

−− Wrap the f u n c t i o n c a l lSQL>exec dbms output . p u t l i n e ( bmi (1 .87 , 9 0 ) ) ;

NoteOutput from server is not enabled by default in a session!

Return value of a function cannot be ignored!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 13 / 56

Page 17: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Executing Stored Procedures

Example (Execute on Oracle server)−− to enable output from the serverSQL>set se rverou tpu t on

−− execute the procedureSQL>execute h e l l o w o r l d ;

−− execute the f u n c t i o nSQL>exec bmi (1 .87 , 90 ) ;−− r e s u l t s i n an er ro r , value re turned by f u n c t i o n must be used !

−− Wrap the f u n c t i o n c a l lSQL>exec dbms output . p u t l i n e ( bmi (1 .87 , 9 0 ) ) ;

NoteOutput from server is not enabled by default in a session!

Return value of a function cannot be ignored!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 13 / 56

Page 18: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Executing Stored Procedures

Example (Execute on Oracle server)−− to enable output from the serverSQL>set se rverou tpu t on

−− execute the procedureSQL>execute h e l l o w o r l d ;

−− execute the f u n c t i o nSQL>exec bmi (1 .87 , 90 ) ;−− r e s u l t s i n an er ro r , value re turned by f u n c t i o n must be used !

−− Wrap the f u n c t i o n c a l lSQL>exec dbms output . p u t l i n e ( bmi (1 .87 , 9 0 ) ) ;

NoteOutput from server is not enabled by default in a session!

Return value of a function cannot be ignored!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 13 / 56

Page 19: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Using SQL in Stored Procedures

Example (Use the Data Stored)create or rep lace f u n c t i o n g e t s t a t u s ( s t u d e n t i d number )r e t u r n varchar2 i s

v s t a t u s varchar2 ( 5 0 ) ;begin

s e l e c t s ta . dsci n t o v s t a t u sfrom student stu , s ta tus s tawhere s tu . s t a t i d = sta . s t a t i dand stu . s id = s t u d e n t i d ;r e t u r n v s t a t u s ;

end ;

NoteThe declaration of the variable v status

The usage of the into keyword in the select statement

The usage of the parameter student id in the select statement

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 14 / 56

Page 20: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Calling Other Procedures

Example (Callee)create or rep lace procedure p ( s t varchar2 ) asbegin

dbms output . p u t l i n e ( s t ) ;end ;

Example (Caller)create or rep lace procedure c a l l p i sbegin

p ( ’ He l lo ’ ) ; p ( ’ World ! ’ ) ;end ;

NoteCan call own and built-in stored procedures

Will use the procedure p instead of dbms output.put line

You are now officially a PL/SQL library builder!!!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 15 / 56

Page 21: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Calling Other Procedures

Example (Callee)create or rep lace procedure p ( s t varchar2 ) asbegin

dbms output . p u t l i n e ( s t ) ;end ;

Example (Caller)create or rep lace procedure c a l l p i sbegin

p ( ’ He l lo ’ ) ; p ( ’ World ! ’ ) ;end ;

NoteCan call own and built-in stored procedures

Will use the procedure p instead of dbms output.put line

You are now officially a PL/SQL library builder!!!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 15 / 56

Page 22: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Calling Other Procedures

Example (Callee)create or rep lace procedure p ( s t varchar2 ) asbegin

dbms output . p u t l i n e ( s t ) ;end ;

Example (Caller)create or rep lace procedure c a l l p i sbegin

p ( ’ He l lo ’ ) ; p ( ’ World ! ’ ) ;end ;

NoteCan call own and built-in stored procedures

Will use the procedure p instead of dbms output.put line

You are now officially a PL/SQL library builder!!!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 15 / 56

Page 23: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Control Structures: A Crash Course I

Example (The If Statement)create or rep lace procedure pb ( va l boolean ) i sbegin

i f va l = t rue thendbms output . p u t l i n e ( ’ t r ue ’ ) ;

e l s i f va l = f a l s e thendbms output . p u t l i n e ( ’ f a l s e ’ ) ;

e lsedbms output . p u t l i n e ( ’ n u l l ’ ) ;

end i f ;end ;

NoteIs this stupid?

Recall three-valued logic the root of all evil!

We will use the procedure pb in the code that follows!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 16 / 56

Page 24: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Control Structures: A Crash Course II

Example (The While Statement)create or rep lace procedure count 10 i s

i i n t := 1 ;begin

wh i le i < 10 loopdbms output . p u t l i n e ( i ) ;i := i + 1 ;

end loop ;

NoteWhat is printed 1 to 9 or 1 to 10?

PL/SQL also has a for statement, very different from C

PL/SQL does not have increment/decrement operators, e.g., i−− or ++j

PL/SQL does not have compound assignments, e.g., i+=7 or j∗=2

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 17 / 56

Page 25: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Surprises: In General

SurprisesThe code is stored in the DBMS!

{ has been replaced by begin and } by end

SQL and programming logic blends very nicely!I A strong-point of PL/SQL

Procedures are different from functions

The assignment operator is := and not =

The comparison operator is = and not ==

Control structures are quite different from the C world

Three-valued logic will time and again surprise you!Server output is not enabled by default

I Which is a big surprise

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 18 / 56

Page 26: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Outline

1 Introduction

2 Stored ProceduresAn OverviewData TypesParameter ParsingCursors

3 PackagesCase Study: Table API

4 Summary

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 19 / 56

Page 27: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

An ExampleExample (Various Data Types)create or rep lace procedure use bas ic types i s

v s t r varchar2 (30) := ’A s t r i n g ’ ;v i n t i n t := 2∗∗65;c p i constant f l o a t := 3.14159265358979323846264338327950288419;v f l o a t f l o a t := v i n t ∗ c p i ;

beginp ( v s t r ) ; p ( v i n t ) ; p ( v f l o a t ) ;

end ;

OutputA string36893488147419103232115904311329233965478,149216911761758199

NoteForget what you think of data types and size!

Very high precision on all number types in both SQL and PL/SQL

The size of strings must be definedKristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 20 / 56

Page 28: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Overview: Scalar Data TypesScalar Data Types

Description Type Examples

Integerssmallint -100, 0, 100int/integer -1000, 0, 1000positive 0, 1, 2, 3

Floatsnumber 10.3dec/decimal 123.456, 3.4real 123456.7890

Stringsvarchar2 Hello, Theta-Joinnvarchar2 Tøger, Dæmonchar World, Noise

Boolean Boolean True, FalseDate/time date 2007-09-09

timestamp 2009-09-09 12:34:56

NoteNot all of these data types are available from within SQL!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 21 / 56

Page 29: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Quiz: The Decimal Data Type

Example (Rouding)create or rep lace procedure us ing dec imal i s

v dec decimal ( 4 , 2 ) ;begin

v dec := 12.34;dbms output . p u t l i n e ( v dec ) ;v dec := 12.344;dbms output . p u t l i n e ( v dec ) ;v dec := 12.347;dbms output . p u t l i n e ( v dec ) ;

end ;

QuestionsWill this compile, note that it is decimal(4,2)?

What will be printed (if it compiles)?

Are you surprised?

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 22 / 56

Page 30: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Overview: Other Data Types

Special Data Types

Description Type

CompositeRecordVarrayTable

Large ObjectsBLOBCLOBBFILE

Reference TypesREFREF CURSOR

NoteWe will only use records in this lecture.

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 23 / 56

Page 31: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Anchored Data Types: Type

Example (Anchor for a Column)create or rep lace f u n c t i o n ge t s ta tus anchored (

s t u d e n t i d s tudent . s id%type )r e t u r n s ta tus . dsc%type i s

v s t a t u s s ta tus . dsc%type ;begin

s e l e c t s ta . dsci n t o v s t a t u sfrom student stu , s ta tus s tawhere s tu . s t a t i d = sta . s t a t i dand stu . s id = s t u d e n t i d ;r e t u r n v s t a t u s ;

end ;

NoteThe anchored type using the %type

Very convenient of maintenance reasons (avoid “hard-wiring” types)I Widely used, you are encouraged to use it!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 24 / 56

Page 32: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Anchored Data Types: Rowtype

Example (Anchor for a Table)create or rep lace procedure get course rowtype (

course id course . c id%type )i s

v row course%rowtype ;v tmp varchar2 ( 5 0 0 ) ;

begins e l e c t ∗i n t o v rowfrom course cwhere c . c id = course id ;v tmp := v row . cname | | ’ : ’ | | v row . dsc ;p ( v tmp ) ;

end ;

NoteThe anchored type using the rowtype

I Creates a record

The dot notation for access elements of the record

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 25 / 56

Page 33: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Surprises: Data Type

NoteStrings are a basic type, not an object like in Java or C#

I A maximum size must be specified

The sizes of the basic data type are very different from C and JavaDate and time are basic data types!

I This is very handy

The anchored types is something new compared to C and JavaBooleans are not a basic data type in SQL but in PL/SQL

I This sometimes leads to very annoying problems

Support for composite data type is not very good in PL/SQLcompared to C and JavaLOB objects are plain stupid

I But sometimes necessary

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 26 / 56

Page 34: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Outline

1 Introduction

2 Stored ProceduresAn OverviewData TypesParameter ParsingCursors

3 PackagesCase Study: Table API

4 Summary

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 27 / 56

Page 35: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

OverviewExamplecreate or rep lace procedure p i n ( va l i n i n t ) i s

v tmp i n t ;begin

v tmp := va l + 5 ;−−va l := va l + 5 ; /∗ i l l e g a l va l i s read−only ∗ /

end ;

Examplecreate or rep lace procedure p i n o u t ( va l i n out i n t ) i sbegin

va l := va l + 5 ;end ;

Examplecreate or rep lace procedure c a l l p s i s

v i n i n t := 10;v i n o u t i n t := 10;

beginp i n ( v i n ) ; p ( v i n ) ;p i n o u t ( v i n o u t ) ; p ( v i n o u t ) ;

end ;

When execute call ps prints 10 and 15, why?

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 28 / 56

Page 36: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

QuizExamplecreate or rep lace procedure p i n o u t ( va l i n out i n t ) i sbegin

va l := va l + 5 ;end ;

Examplecreate or rep lace procedure c a l l p s i s

v i n i n t := 10;v i n o u t i n t := 10;

beginp i n ( v i n ) ; p ( v i n ) ;p i n o u t ( v i n o u t ) ; p ( v i n o u t ) ;

end ;

QuestionsWhat are the formal parameter(s)?

What are the actual parameter(s)?

Is it call-by-value or call-by-reference?

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 29 / 56

Page 37: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Out Parameters

Examplecreate or rep lace procedure ge t x y coo r (

c oo r i d i n i n t , x coor out i n t , y coor out i n t )i sbegin

x coor := round ( c oo r i d / 4 . 2 ) ; −− s tup id c a l c u l a t i o n sy coor := round ( c oo r i d / 7 . 5 ) ;

end ;

Notein and out parameters can both be used in same procedure

The out parameters are write-only

More than one value is “returned” by the procedure

The calculation is naturally plain stupid

round is the built-in rounding function

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 30 / 56

Page 38: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Parameter Mode

Mode

Mode Description

in Formal parameter is read-onlyout Formal parameter is write-only

in out Formal parameter is read-write

Notein is the default parameter mode if the mode is not specified

Stored procedures cannot be overloaded on the parameter signature

There is a nocopy compiler hint for in out parameters

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 31 / 56

Page 39: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

What is Wrong Here?

create procedure proc 1 ( i i n t )i sbegin−− sn ip compl icated s t u f fr e t u r n i ;

end ;

create f u n c t i o n func 1 ( i i n t )r e t u r n i n t i sbegin−− sn ip compl icated s t u f fr e t u r n ’ h e l l o ’ ;

end ;A B

create f u n c t i o n func 2 ( i i n t )r e t u r n i n t i sbegin−− sn ip compl icated s t u f fr e t u r n i ∗2;p ( ’ h e l l o wor ld ’ ) ;

end ;

create f u n c t i o n func 3 ( i i n t )r e t u r n i n t i sbegin−− sn ip compl icated s t u f fp ( ’ h e l l o wor ld ’ ) ;

end ;

C D

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 32 / 56

Page 40: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Avoid This

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 33 / 56

Page 41: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Additional Comments on Parameters

Items to NoticeA default value can be provided for each parameter

Stored procedures cannot be overloaded on the parameter signature

Stored procedures can be called by position or by name

Works like in most programming languages, however different syntax!

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 34 / 56

Page 42: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Outline

1 Introduction

2 Stored ProceduresAn OverviewData TypesParameter ParsingCursors

3 PackagesCase Study: Table API

4 Summary

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 35 / 56

Page 43: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Overview

DefinitionA cursor is a mechanism that ensure a result set can be identified by adeclarative language such as SQL and processed by a procedurallanguage such as PL/SQL or C#

SolutionSolves the well-known impedance mismatch problem!

GeneralityKnowledge about cursors in PL/SQL is directly transferable to many otherprogramming languages.

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 36 / 56

Page 44: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Overview

DefinitionA cursor is a mechanism that ensure a result set can be identified by adeclarative language such as SQL and processed by a procedurallanguage such as PL/SQL or C#

SolutionSolves the well-known impedance mismatch problem!

GeneralityKnowledge about cursors in PL/SQL is directly transferable to many otherprogramming languages.

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 36 / 56

Page 45: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Overview

DefinitionA cursor is a mechanism that ensure a result set can be identified by adeclarative language such as SQL and processed by a procedurallanguage such as PL/SQL or C#

SolutionSolves the well-known impedance mismatch problem!

GeneralityKnowledge about cursors in PL/SQL is directly transferable to many otherprogramming languages.

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 36 / 56

Page 46: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

The Unix ls commandExample (List Tables)create or rep lace procedure l s i s

cursor c t a b l e s i ss e l e c t ∗ from cat ;

v table name cat . table name%type ;v type cat . t a b l e t y p e%type ;

beginopen c t a b l e s ;loop

fe t ch c t a b l e s i n t o v table name , v type ;e x i t when c t a b l e s%notfound ;p ( v table name ) ;

end loop ;c lose c t a b l e s ;

end ;

NoteThe view tab is a table that contains all table names

The cursor is declared, opened, fetched, and closed

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 37 / 56

Page 47: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Cursor Attributes

Attributes

Attribute Type Descriptionnotfound Boolean True if a record is fetched unsuccessfullyfound Boolean True if a record is fetched successfullyrowcount Integer The number of records fetched from the cursorisopen Boolean True if cursor is open

NoteThere are additional attributes for bulk operations.

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 38 / 56

Page 48: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Quiz: Using rowcount

Examplecreate or rep lace procedure l s c n t i s

cursor c t a b l e s i ss e l e c t table name from cat ;

v table name cat . table name%type ;begin

open c t a b l e s ;loop

fe t ch c t a b l e s i n t o v table name ;e x i t when c t a b l e s%notfound ;p ( c t a b l e s%rowcount | | ’ ’ | | v table name ) ;

end loop ;c lose c t a b l e s ;

end ;

QuestionWhat is printed?

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 39 / 56

Page 49: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Quiz: Using isopen?Examplecreate or rep lace procedure l s i sopen i s

cursor c t a b l e s i ss e l e c t table name from cat ;

v table name cat . table name%type ;v s t a t u s boolean := f a l s e ;

beginv s t a t u s := c t a b l e s%isopen ; pb ( v s t a t u s ) ;open c t a b l e s ;v s t a t u s := c t a b l e s%isopen ; pb ( v s t a t u s ) ;loop

fe t ch c t a b l e s i n t o v table name ;e x i t when c t a b l e s%notfound ;

end loop ;v s t a t u s := c t a b l e s%isopen ; pb ( v s t a t u s ) ;c lose c t a b l e s ;v s t a t u s := c t a b l e s%isopen ; pb ( v s t a t u s ) ;

end ;

QuestionWhat is printed?

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 40 / 56

Page 50: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Outline

1 Introduction

2 Stored ProceduresAn OverviewData TypesParameter ParsingCursors

3 PackagesCase Study: Table API

4 Summary

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 41 / 56

Page 51: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Introduction

IdeaA class like conceptVery good for building libraries

I A way to cluster related stored procedures

Has a header and a body (think C-style languages)

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 42 / 56

Page 52: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Outline

1 Introduction

2 Stored ProceduresAn OverviewData TypesParameter ParsingCursors

3 PackagesCase Study: Table API

4 Summary

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 43 / 56

Page 53: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Introduction

GoalTo build a uniform way to address the data stored in table!

Methods

Name Description

exist(<primary key>) Return true if primary key existsto string(<primary key>) Return string representation of rowprint(<primary key>) Convenient way to display a row

NoteMany more methods can be envisioned

Think object-relational mapping (ORM) tools

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 44 / 56

Page 54: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Introduction

GoalTo build a uniform way to address the data stored in table!

Methods

Name Description

exist(<primary key>) Return true if primary key existsto string(<primary key>) Return string representation of rowprint(<primary key>) Convenient way to display a row

NoteMany more methods can be envisioned

Think object-relational mapping (ORM) tools

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 44 / 56

Page 55: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Header File: Course Table

Example (Header)create or rep lace package ccourse i s

f u n c t i o n e x i s t ( c id course . c id%type ) r e t u r n boolean ;f u n c t i o n t o s t r i n g ( c id course . c id%type ) r e t u r n s t r i n g ;procedure p r i n t ( c id course . c id%type ) ;

end ;

NoteThe header lists all the public stored procedures

The naming convention table name course package name ccourse

The design is influenced by the Object class from Java and C#

QuizWhy is the method called exist and not exists?

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 45 / 56

Page 56: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Header File: Course Table

Example (Header)create or rep lace package ccourse i s

f u n c t i o n e x i s t ( c id course . c id%type ) r e t u r n boolean ;f u n c t i o n t o s t r i n g ( c id course . c id%type ) r e t u r n s t r i n g ;procedure p r i n t ( c id course . c id%type ) ;

end ;

NoteThe header lists all the public stored procedures

The naming convention table name course package name ccourse

The design is influenced by the Object class from Java and C#

QuizWhy is the method called exist and not exists?

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 45 / 56

Page 57: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Body File: Private Method and CursorExample (Body)create or rep lace package body ccourse i s

−− p r i v a t e constantc e r r o r c i d n u l l constant i n t := −20001;−− a cursor used i n the implementat ioncursor c u r e x i s t ( cv c i d course . c id%type ) i s

s e l e c t c . c id , c . cname , c . semester , c . dscfrom course cwhere c . c id = cv c i d ;

−− a p r i v a t e methodprocedure c h e c k v a l i d c i d ( c id course . c id%type ) i sbegin

i f c id i s n u l l thenr a i s e a p p l i c a t i o n e r r o r ( c e r r o r c i d n u l l ,

’ Course ID i s n u l l ’ ) ;end i f ;

end ;

NoteThe method check valid cid is private

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 46 / 56

Page 58: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Body File: Private Method and CursorExample (Body)create or rep lace package body ccourse i s

−− p r i v a t e constantc e r r o r c i d n u l l constant i n t := −20001;−− a cursor used i n the implementat ioncursor c u r e x i s t ( cv c i d course . c id%type ) i s

s e l e c t c . c id , c . cname , c . semester , c . dscfrom course cwhere c . c id = cv c i d ;

−− a p r i v a t e methodprocedure c h e c k v a l i d c i d ( c id course . c id%type ) i sbegin

i f c id i s n u l l thenr a i s e a p p l i c a t i o n e r r o r ( c e r r o r c i d n u l l ,

’ Course ID i s n u l l ’ ) ;end i f ;

end ;

NoteThe method check valid cid is private

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 46 / 56

Page 59: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Body File: The Exist Method

Example (Method)f u n c t i o n e x i s t ( c id course . c id%type ) r e t u r n boolean i s

r e c e x i s t c u r e x i s t%rowtype ;begin

c h e c k v a l i d c i d ( c id ) ; −− p recond i t i onopen c u r e x i s t ( c id ) ;f e t ch c u r e x i s t i n t o r e c e x i s t ;c lose c u r e x i s t ;r e t u r n ( r e c e x i s t . c id i s not n u l l ) ;

end ;

NoteUses the private method check valid cid to check preconditions

Uses the private cursor cur exist

Returns true if a valid primary key is found

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 47 / 56

Page 60: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Body File: The to string Method

Example (Method)f u n c t i o n t o s t r i n g ( c id course . c id%type ) r e t u r n s t r i n g i s

v r v s t r i n g ( 5 1 2 ) ;r e c e x i s t c u r e x i s t%rowtype ;

beginc h e c k v a l i d c i d ( c id ) ; −− p recond i t i onopen c u r e x i s t ( c id ) ;f e t ch c u r e x i s t i n t o r e c e x i s t ;c lose c u r e x i s t ;v r v := ’ course name : ’ | | r e c e x i s t . cname | | ’ ’ | |

’ course desc : ’ | | r e c e x i s t . dsc ;r e t u r n v r v ;

end ;

NoteUses the private method check valid cid to check preconditions

Uses the private cursor cur exist

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 48 / 56

Page 61: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Body File: The print Methods

Example (Method)procedure p r i n t ( c id course . c id%type ) i sbegin

c h e c k v a l i d c i d ( c id ) ; −− p recond i t i ondbms output . p u t l i n e ( t o s t r i n g ( c id ) ) ;

end ;

NoteUses the private method check valid cid to check preconditions

print calls to string

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 49 / 56

Page 62: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Exercising the Package

ExampleSQL>set se rverou tpu t on−− execute the procedureSQL>execute ccourse . p r i n t ( 4 ) ;

NoteSimilar to executing a stored procedure

Access member by the dot notation

ExampleSQL>execute ccourse . p r i n t ( n u l l ) ;

NoteResults in an error “ORA-20001: Course ID is null”

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 50 / 56

Page 63: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Exercising the Package

ExampleSQL>set se rverou tpu t on−− execute the procedureSQL>execute ccourse . p r i n t ( 4 ) ;

NoteSimilar to executing a stored procedure

Access member by the dot notation

ExampleSQL>execute ccourse . p r i n t ( n u l l ) ;

NoteResults in an error “ORA-20001: Course ID is null”

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 50 / 56

Page 64: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Exercising the Package

ExampleSQL>set se rverou tpu t on−− execute the procedureSQL>execute ccourse . p r i n t ( 4 ) ;

NoteSimilar to executing a stored procedure

Access member by the dot notation

ExampleSQL>execute ccourse . p r i n t ( n u l l ) ;

NoteResults in an error “ORA-20001: Course ID is null”

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 50 / 56

Page 65: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Summary: Packages

Main PointsCan have a public and a private part

I Has no protected access modifiers as in Java or C#

Is used to cluster related stored procedures

Cursors, constants, and variables can be shared between methods ina package

The foundation for building larger libraries in PL/SQL

There is a huge library of built-it packages on Oracle

Has very good exception handling facilities

Comparison to Object-Oriented LanguagesNo inheritance

Only static methods

No concept of an object

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 51 / 56

Page 66: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Outline

1 Introduction

2 Stored ProceduresAn OverviewData TypesParameter ParsingCursors

3 PackagesCase Study: Table API

4 Summary

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 52 / 56

Page 67: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Advantages

AdvantagesA complete programming language

I You are not missing stuff as you sometimes are in SQL

In wide-spread usage in the industryI Adds to your market value

Very good integration of programming logic and SQLImpedance mismatch is basically removed

I PL/SQL data types are super set of SQL data typesI Cursors enable the processing of sets (or bags)

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 53 / 56

Page 68: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Disadvantages

DisadvantagesProprietary programming languageThere is a very large number (>1000) of reserved words

I Can be hard to come up with a variable name that is not a reservedword!

Pascal-family language (C-family more well-known)I Which lead to a number of surprises

Object-oriented features are “clumsy”I This has not been covered in this lecture

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 54 / 56

Page 69: Introduction to PL/SQL - torp/Oracle/introduction_to_plsql.pdf · PDF fileIntroduction to PL/SQL Kristian Torp Department of Computer Science Aalborg University torp@cs.aau.dk December

Additional Information

Web Siteswww.oracle.com/technology/tech/pl_sql/index.html

PL/SQL’s home

www.psoug.org/library.html A very good and complete wiki withPL/SQL information

plsql-tutorial.com/ A crash course covering many PL/SQLfeatures

en.wikibooks.org/wiki/Oracle_Programming/SQL_Cheatsheet

A short overview of PL/SQL

www.java2s.com/Tutorial/Oracle/CatalogOracle.htm Manygood examples, too many commercials

Kristian Torp (Aalborg University) Introduction to PL/SQL December 2, 2011 55 / 56