You are on page 1of 25

Web Programming with PL/SQL

Erdogan Dogdu
Georgia State University
Computer Science Department
edogdu@cs.gsu.edu
http://db.gsu.edu/~edogdu

Content

Oracle Architecture for Web Apps


Oracle mod_plsql Apache module
HTTP
A Simple PL/SQL Web Toolkit Example
PL/SQL Web Toolkit
Parameter Passing
HTML Forms
PL/SQL Server Pages

CSC8711

Oracle Web Extensions


3-tier: client,
application server
(OAS 9i), database
(Oracle 9i)
mod_plsql in OAS
PL/SQL Web Toolkit

CSC8711

Web Request Processing


1.

2.
3.

The Oracle HTTP Server receives a


PL/SQL Server Page request from a client
browser.
The Oracle HTTP Server routes the request
to mod_plsql.
The request is forwarded by mod_plsql to
the Oracle Database. By using the
configuration information stored in your
DAD, mod_plsql connects to the database.

CSC8711

Web Request Processing (cont.)


4.

5.

6.

7.

Mod_plsql prepares the call parameters,


and invokes the PL/SQL procedure in the
application.
The PL/SQL procedure generates an HTML
page using data and the PL/SQL Web
Toolkit accessed from the database.
The response is returned to mod_plsql.
The Oracle HTTP Server sends the
response to the client browser.

CSC8711

Invoking mod_plsql

protocol://hostname[:port]/DAD

location/[[!][schema.][package.]proc_
name[?query_string]]
Example:
http://db.gsu.edu:7777/pls/csc8711/simple

CSC8711

HTTP
GET, POST, HEAD methods
GET. Parameters in query string.

http://host:port/pls/DAD/foo?a=v&b=1

POST. For large parameter data.


http://host:port/pls/DAD/foo, POST
data="a=v&b=1

HEAD. No content data is streamed


back. Only a confirmation.

CSC8711

A Simple Example

Write a PL/SQL procedure (simple.sql) using


PL/SQL Web Toolkit:
CREATE OR REPLACE PROCEDURE simple AS
l_user varchar2(30);
BEGIN
select USER into l_user from dual;
htp.htmlOpen;
htp.headOpen;
htp.title('A Very Very Simple Example');
htp.headClose;
htp.bodyOpen;
htp.line;
htp.header(1,'Simple Example');
htp.line;
htp.paragraph;

CSC8711

A Simple Example (cont.)

htp.print('Today''s date is: ' || to_char(sysdate, 'DD/MM/YYYY'));


htp.br;
htp.print('Today''s day is: ' || to_char(sysdate, 'DAY'));
htp.paragraph;
htp.print('Ordinary <em>tags</em> can be used in the strings that we send.');
htp.print('Your Oracle USERID is ' || l_user);
htp.line;
htp.address('Raj Sunderraman');
-- owa_util.signature('orarbkx.simple');
htp.bodyClose;
htp.htmlClose;
EXCEPTION
When others Then
htp.print(SQLERRM);
htp.bodyClose;
htp.htmlClose;
END;
/
show errors
CSC8711

A Simple Example (cont.)

Upload the procedure simple to the


database:
> sqlplus
SQL> @simple.sql
Procedure created.
No errors.

Run procedure:
http://db.gsu.edu:7777/pls/csc8711/simple

CSC8711

Web Toolkit
Oracle Web Toolkit includes a number of
packages:
htp and htf package: hypertext
procedures and functions,
owa_cookie: to handle HTTP cookies,
owa_util: utility subprograms,
etc.
CSC8711

htp package
Example:
create or replace procedure hello AS
BEGIN
htp.htmlopen;
-- generates <HTML>
htp.headopen;
-- generates <HEAD>
htp.title('Hello');
-- generates <TITLE>Hello</TITLE>
htp.headclose;
-- generates </HEAD>
htp.bodyopen;
-- generates <BODY>
htp.header(1, 'Hello'); -- generates <H1>Hello</H1>
htp.bodyclose;
-- generates </BODY>
htp.htmlclose;
-- generates </HTML>
END;

CSC8711

htp and htf package

More htp functions:

Comment: htp.comment
Applet: htp.appletopen,
List: htp.olistOpen, htp.ulinstOpen,
Form: htp.formOpen,
Table: htp.tableOpen, htp.tableData,
Image: htp.img, etc.
Formatting: htp.print, htp.bold, htp.underline,
Frame: htp.frame,

CSC8711

owa_util

owa_util.tablePrint
create or replace procedure showemps is
ignore_more boolean;
begin
ignore_more := owa_util.tablePrint('emp',
'BORDER', OWA_UTIL.PRE_ TABLE);
end;

This procedure gives the output (next slide)


CSC8711

owa_util
<PRE>
----------------------------------------------------------------| EMPNO |ENAME |JOB
|MGR
|HIREDATE
| SAL | COMM | DEPTNO |
----------------------------------------------------------------| 7369| SMITH | CLERK
| 7902 | 17-DEC-80 | 800 |
| 20 |
| 7499| ALLEN | SALESMAN| 7698 | 20-FEB-81 | 1600 | 300 | 30 |
| 7521| WARD
| SALESMAN| 7698 | 22-FEB-81 | 1250 | 500 | 30 |
| 7566| JONES | MANAGER | 7839 | 02-APR-81 | 2975 |
| 20 |
| 7654| MARTIN | SALESMAN| 7698 | 28-SEP-81 | 1250 | 1400| 30 |
| 7698| BLAKE | MANAGER | 7839 | 01-MAY-81 | 2850 |
| 30 |
| 7900| JAMES | CLERK
| 7698 | 03-DEC-81 | 950 |
| 30 |
| 7902| FORD
| ANALYST | 7566 | 03-DEC-81 | 3000 |
| 20 |
| 7934| MILLER | CLERK
| 7782 | 23-JAN-82 | 1300 |
| 10 |
----------------------------------------------------------------</PRE>

CSC8711

Passing Parameters

GET method
http://db:7777/pls/csc8711/pl1?str=Hello&num=4
create or replace procedure pl1(str in varchar2, num in
number) as
1. Hello
begin
<br>
for i in 1..num loop
2. Hello
htp.print(i || '. ' || str);
<br>
htp.br;
3. Hello
end loop;
<br>
end;
4. Hello
<br>

CSC8711

HTML Forms
htp.formOpen(curl in varchar2,
cmethod in varchar2 default POST,
ctarget in varchar2, cenctype in
varchar2 default null, cattributes in
varchar2 default null);
<FORM ACTION=curl
METHOD=cmethod
TARGET=ctarget
ENCTYPE=cenctype cattributes>

CSC8711

HTML Forms
htp.formSubmit(cname in varchar2
default null, cvalue in varchar2 default
Submit, cattributes in varchar2 default
null)
<INPUT TYPE=submit
NAME=cname VALUE=cvalue
cattributes>

CSC8711

HTML Forms

HTML forms can have the following elements:

Single line input text (htp.formText)


Single line input password (htp.formPassword)
Checkboxes (htp.formCheckbox)
Radio buttons (htp.formRadio)
Submit buttons (htp.formSubmit)
Text areas (htp.formTextarea)
Selects (htp.formSelectOpen,
htp.formSelectOption, htp.formSelectClose)

CSC8711

HTML Forms

Useful functions:
owa_util.get_owa_service_path: Returns
the prefix of the URL pointing to PL/SQL
procedure
Example:
http://db.gsu.edu:7777/pls/survey/login

Use in PL/SQL web program as:


htp.formOpen(owa_util.get_owa_service_
path || start_session);

CSC8711

Disadvantages of Web Toolkit


PL/SQL Web Toolkit (htp, htf) generates
HTML code form PL/SQL programs.
Generating nice web pages is difficult,
you cannot author PL/SQL programs in
Frontpage.
Solution is PSP (next)

CSC8711

PL/SQL Server Pages (PSP)


Author web pages using script-friendly
HTML authoring tools.
Drop in PL/SQL code in web pages.
In short:

Web Toolkit: generate HTML from PL/SQL


PSP: embedded PL/SQL within HTML

CSC8711

PL/SQL Server Pages (PSP)


Same script tag syntax as JSP, also
similar to ASP
PSP files should have .psp extension
Can be as simple as an HTML page (no
PL/SQL script)
Specifying the scripting language

<%@ page language="PL/SQL" %>

CSC8711

PL/SQL Server Pages (PSP)

Parameter passing
<%@ plsql parameter="varname" %>

Returned document type


<%@ page contentType="MIMEtype" %>
Such as text/xml, text/plain, image/jpeg

Stored procedure name


<%@ page procedure="procname" %>

CSC8711

PL/SQL Server Pages (PSP)

Loading psp document to Oracle


loadpsp [ -replace ] -user
username/password[@connect_string] [
include_file_name ... ] [ error_file_name ]
psp_file_name ...

CSC8711

You might also like