Databases on the Web

advertisement
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
Download