Oracle PL/SQL Server Pages (PSP) - PowerPoint PPT Presentation

About This Presentation
Title:

Oracle PL/SQL Server Pages (PSP)

Description:

Oracle PL/SQL Server Pages (PSP) – PowerPoint PPT presentation

Number of Views:190
Avg rating:3.0/5.0
Slides: 31
Provided by: htwk7
Category:
Tags: psp | sql | oracle | pages | plsql | server

less

Transcript and Presenter's Notes

Title: Oracle PL/SQL Server Pages (PSP)


1
Oracle PL/SQL Server Pages (PSP)
2
Grundidee PSP
  • Internet-Seiten mit dynamischer Präsentation von
    Inhalten durch Einsatz von PL/SQL-Anweisungen
  • Server-Side Scripting (Generierung der Seiten im
    DB-Server - nicht im Webserver)
  • Basiert auf PL/SQL Web Toolkit
  • Bestandteil von Oracle Application Server (OAS)
    und Oracle WebDB
  • Einbindung dynamischer Inhalte durch
    PL/SQL-Skripte, durch spezielle Tags
    gekennzeichnet

3
Einordnung in Oracle Application Server
4
Vorteile von PSP
  • Trennung von Anwendungs- und Präsentationslogik
  • HTML-Anweisungen und PL/SQL Code separat
  • Abgrenzung durch PL/SQL-spezifische Tags
  • Leichte Erlernbarkeit
  • Einfacher Zugriff auf Daten der Datenbank
  • Ausführung im Server
  • Verbindung mit anderen Skriptsprachen möglich
  • z.B. Javascript oder Visual Basic-Script (zur
    Prüfung von Benutzereingaben)
  • nicht kombinierbar mit anderen serverseitigen
    Scripting-techniken

5
Web Toolkit vs. PSP
CREATE OR REPLACE PROCEDURE home_page AS BEGIN
htp.htmlOpen htp.headOpen htp.title(My
home page) htp.headClose htp.bodyOpen htp.p
rint (This is the home page of user
generated on sysdate
.) htp.bodyClose htp.htmlClose END
6
Entwicklung von PL/SQL Server Pages
  • Schreiben der PL/SQL Server Page
  • Standard-Skripttag
  • Spezielle Skripttags
  • Pages
  • Prozeduren
  • Parameter
  • Deklarationen
  • Expression Blocks
  • Include
  • Kommentare
  • Kompilieren der PSP-Datei als Stored Procedure
  • Aufruf der PSP im Browser

7
Standard-Skripttag
lt PL/SQL code gt
Syntax
  • Funktion Begrenzung von PL/SQL-Anweisungen
  • Inhalt beliebige PL/SQL-Statements, z.B.
    Prozeduraufrufe

8
Spezielle TagsPage Direktive
lt page languagePL/SQL contentTypecontent
type string errorPagefile.psp gt
Syntax
  • Funktion Charakterisierung der PSP
  • Attribute
  • language verwendete Skriptsprache (PL/SQL
    Standard)
  • contentType Inhaltstyp der Seite text/html
    Standard
  • errorPage PSP-Seite, die auf auftretenden
    Fehlern aufgerufen wird (Standard keine Datei)

9
Spezielle TagsProcedure Parameter Direktive
lt plsql procedureprocedure name gt
Syntax
lt plsql parameterparameter name
gt typePL/SQL datatype defaultvalue gt
  • Funktion Spezifikation von Prozedur und
    Parameter (alles IN)
  • Attribute
  • procedure Name des Prozedur
  • parameter Name des Parameters
  • type Datentyp des Parameters Standardwert
    varchar2 (ohne Länge)
  • default Standardwert für Parameter

10
Spezielle TagsDeclaration Direktive
lt! PL/SQL declaration PL/SQL declaration ...
gt
Syntax
  • Funktion Deklaration von Variablen und Cursor
    auf der ganzen Seite
  • Beispiel

lt! cursor prod_cur is select from products
where price between minprice andmaxprice
vc_name varchar2(200)Peter gt
11
Spezielle Tags Expression Block / Print
Direktive
lt PL/SQL expression gt
Syntax
  • Funktion Ausgabe eines beliebigen
    PL/SQL-Ausdrucks (String, Zahl, Ergebnis eines
    Funktionsaufrufs)
  • Beispiel

lt The employee name is emp_rec.ename
gt oder The employee name is lt emp_rec.ename
gt
12
Spezielle Tags Include Direktive
lt_at_ include file path name gt
Syntax
  • Funktion Einbinden des Quelltexts anderer
    Dateien in die Seite
  • Beispiel

lt include fileheader.inc gt
  • Anmerkungen
  • Datei darf HTML- und PSP-Skriptelemente enthalten
  • Einbindung nur einmal zur Ãœbersetzungszeit
    (mögliche Alternative Einbindung durch
    Prozeduraufruf)

13
Spezielle Tags Kommentare
lt-- Kommentar --gt
Syntax
  • Funktion erscheint nicht in der generierten
    Prozedur bzw. in den daraus erstellten HTML-Seiten

lt!-- Kommentar --gt
Syntax
  • Funktion Kommentare, die in der HTML-Ausgabe
    erscheinen (normale HTML-Syntax)

-- einzeiliger Kommentar / mehrzeiliger
Kommentar /
Syntax
  • Funktion Kommentare innerhalb eines
    PL/SQL-Blocks

14
Kompilieren der PL/SQL Server Page
Syntax
loadpsp -replace - user username/password_at_conne
ct_string include_file_name ... ltpage1gt
ltpage2gt ...
  • Attribute
  • replace überschreibt Prozedur gleichen Namens
  • username/password_at_connect_string
    Login-Information
  • include-file_name Dateien, die mittels include
    eingebunden werden
  • page1 ... Name der PSP-Dateien, die kompiliert
    werden sollen

Beispiel
loadpsp -replace - user name/passw_at_imnlehre
timestamp.inc display_cust.psp
15
Beispiel einer Generierung
16
Verarbeitung des Aufrufs
17
ParameterverarbeitungGET-Methode
  • Beispiel

... ltform methodGET actioncust_order_itemsgt
ltinput typehidden namecust_id
valueltcust_id gt ltinput typetext
nameord_id size10 valueltorder_id
gt ltinput_typesubmit value Order
Detailsgt lt/formgt ...
URL bei Submit
http//goliath.imn.htwk-leipzig.de8080/WebDB/ cu
st_order_items?ord_id100cust_id100
18
ParameterverarbeitungPOST-Methode
  • Beispiel

... ltform methodPOST actioncust_order_itemsgt
ltinput typehidden namecust_id
valueltcust_id gt ltinput typetext
nameord_id size10 valueltorder_id
gt ltinput_typesubmit value Order
Detailsgt lt/formgt ...
URL bei Submit
http//goliath.imn.htwk-leipzig.de8080/WebDB/ cu
st_order_items
19
Hinweise zur Verwendung von PSP
  • Trennung von Anwendungs- und Präsentationslogik
  • Berechnungen in eigenständiger Prozedur
  • Einbinden zusätzlicher Dateien
  • Procedure Invocation direkter Prozeduraufruf
    (bessere Berücksichtigung von Änderungen)

20
Wiederverwendung von Seitenköpfen und -füßen
lt_at_ plsql procedure"page_header" gt lt!-- header
links to customer help page and search button
--gt ltCENTERgt ltA HREF"/support/help.html"gtCustomer
Helplt/Agt ltFORM ACTION"/product/search_prod"gtltINP
UT NAME"item"gt ltINPUT TYPESUBMITgtlt/FORMgt ltHRgt lt!
-- end of header --gt
lt_at_ plsql procedure"page_footer" gt lt!-- footer
company contact info --gt ltHRgt ltCENTERgt WebStore
Inc. ltBRgt 123 Main Street ltBRgt San Francisco, CA
94021 ltBRgt (415) 123-4567 ltBRgt ltA
HREF"mailtosales_at_webstore. lt!-- end of footer
--gt
Aufruf der Prozeduren
ltHTMLgt ltTITLEgtPage Titlelt/TITLEgt ltBODYgt lt
page_headergt ... page body lt
page_footergt lt/BODYgt lt/HTMLgt
21
Fehlerbehandlung - Beispiel
create or replace procedure Show_Details (
Prod_ID in Number, Name out varchar2, Price out
Number ) as as Prod_Name varchar2(30)
Prod_Price Number begin Select Name, Price
Into Prod_name, Prod_Price From Products
Where ID Prod_id ... Name Prod_Name
Price Prod_Price end
create or replace procedure Show_Details(
Prod_ID in Number, Name out varchar2, Price out
Number ) as Prod_Name varchar2(30)
Prod_Price Numberbegin Select Name, Price
Into Prod_name, Prod_Price From Products
Where ID Prod_id ... Name Prod_Name
Price Prod_Priceend
22
Fehlerbehandlung - Verwendung von Errorpages
create or replace procedure Show_Details (
Prod_ID in Number, Name out varchar2, Price out
Number ) as as Prod_Name varchar2(30)
Prod_Price Number begin Select Name, Price
Into Prod_name, Prod_Price From Products
Where ID Prod_id ... Name Prod_Name
Price Prod_Price end
  • erwartete vs. unerwartete Fehler
  • erwarteter Fehler NO_DATA_FOUND
  • unerwarteter Fehler 2 Produkte mit der gleichen
    ID
  • Verwendung von ErrorPage in Page-Direktive zur
    Behandlung unerwarteter Fehler
  • Nachteil keine Parameterübergabe möglich (z.B.
    Fehlerzeitpunkt, Eingabeparameter)

23
Benutzerdefinierte Ausnahmebehandlung (Exceptions)
lt_at_ page errorPage"Error_Page.psp" gt -- Angabe
der Fehlerseite...l_exception EXCEPTION --
Deklaration der Ausnahme l_exception...IF
(TO_DATE(arrival_date,'YYYY-MM-DD') lt
SYSDATE)THEN RAISE l_exception -- Datum
liegt vor dem aktuellem DatumEND IFEXCEPTION
WHEN l_exception THEN -- Test, ob es der vom
Benutzer ausgelöste Fehler ist RAISE
-- Weiterleitung des Fehlers an übergeordnete
Fehler- END --
behandlung in Error_Page
... lt IF (SQLERRM 'User-Defined Exception')
THEN gt lt l_error_message 'Date values
should be greater than Current Date' gt lt
l_error_message gt -- Ausgabe der
Fehlermeldung lt ELSE gt lt SQLERRM gt --
wenn anderer Fehler, Ausgabe der Fehlermeldung lt
END IF gt ...
24
Parameterübergabe
lt_at_ plsql procedure show errorPage"Error_Page.ps
p" gtlt_at_ plsql parameterp_ID typenumber
default0gtlt_at_ plsql parameterp_Text
typevarchar2 defaultgt
ltSELECT NAME p_ID size1gtlt for item in
(select ID, Name from Products order by Name)
loop gt ltoption valueltitem.ID gt
gtltitem.Name gtlt/optiongt lt end loop
gtlt/SELECTgt
SELECT-Box wird durch Abfrage auf Tabelle
Products mit Werten gefüllt, Zuordnung zum
Parameter p_ID 2. Eingabeparameter p_Text als
Input-Feld in HTML-Formular
ltform methodpost actionshow_detailgt
ltpgtEingabe ltinput typetext size50 maxlength50
namep_Namegt ltSELECT NAMEp_ID size1gt
... lt/SELECTgt ltinput typesubmit
valueAbschickengt lt/formgt
25
Benutzeridentifikation
Beispiel Anmeldung mit Kunden-Nr
ltform methodPOST actionStartseitegt
ltpgtltbgtKundennummer eingebenlt/bgt ltINPUT
TYPEtext namecust_id size5gt ltinput
typesubmit valueLogingtlt/pgt lt/formgt
PSP der Startseite-Prozedur und alle
nachfolgenden Prozeduren Parameter für Kunden-Nr.
lt_at_ plsql parametercust_id typenumber gt
Speicherung der Kunden-Nr. in verstecktem Feld,
ermöglicht Weitergabe bei Abschicken des
Formulars (nicht günstig bei komplexeren
Anwendungen!)
ltinput typehidden namecust_id valuelt
cust_id gt
26
Verwendung von Javascript
  • keine Einschränkung gegenüber normalen
    HTML-Seiten
  • clientseitige Skriptsprache
  • Test von Benutzereingaben vor Abschicken in die
    Datenbank
  • Beispiel
  • Prüfe bei Absenden des Formulars (onSubmit) durch
    Aufruf einer Javascript-Funktion (chkFormular),
    die True oder False zurückliefert
  • if TRUE Aufruf der PSP-Prozedur insertCheck
  • vergleiche Quellcode-Beispiel

27
Anzeige von Master-Detail-Beziehungen (Beispiel)
lt_at_ plsql proceduremain gtlthtmlgtltheadgtlttitle
gtMaster/Detail-Textlt/titlegtlt/headgtltframeset
rows40,60gt ltframe srcshow_Master
nameMastergt ltframe srcshow_Detail
nameDetailgtlt/framesetgtlt/htmlgt
Darstellung einer Master-Detail-Beziehung in
Frames Anzeige der Master-Datensätze
show_Master Anzeige der Detail-Datensätze
show_Detail
28
PSP des Master-Frames
lt_at_ page language"PL/SQL" gt lt_at_ plsql
procedure"show_Master" gt lthtmlgt ltheadgtlttitlegtMa
ster-Datasetslt/titlegtlt/headgt ltbodygt ltform
action"show_detail" target"Detail"gt ltSELECT
NAME"p_Cust_ID" size"1"gt lt for item in (select
from Customer order by Cust_name) loop gt
ltoption value"lt item.Cust_ID gt"
gtltitem.Cust_Name gtlt/optiongt lt end loop gt
lt/selectgt ltinput type"submit"
value"Bestellungen anzeigen"gt lt/formgt lt/bodygt lt/h
tmlgt
29
PSP des Detail-Frames
lt_at_ page language"PL/SQL" gt lt_at_ plsql
procedure"show_detail" gt lt_at_ plsql
parameter"p_Cust_ID" default"0"gt lthtmlgt ltheadgt
lttitlegt Detaildatensätze lt/titlegt lt/headgt ltbodygt
ltformgt lttable border"1" gt lttrgt ltth
align"center"gtArtikelnamelt/tdgt ltth
align"center"gtPreislt/tdgt ltth
align"center"gtAnzahllt/tdgt ltth
align"center"gtBestellnummerlt/tdgt ltth
align"center"gtBestellstatuslt/tdgt lt/trgt lt for
item in (SELECT Order_ID, Order_Number,
Order_Sign, Stat_ID, Stat_Desc, Prod_Name,
Prod_Price
FROM CustOrders, Status,
Products WHERE
ORDER_CUST_IDp_Cust_ID AND Stat_ID
()Order_Status AND

Order_Prod_IDProd_ID
ORDER BY Prod_Name ) loop -- () Outer Join,
um auch Bestellungen auszuwählen, die keinen
Status habengt lttrgt lttd align"left"gtlt
item.Prod_Name gtlt/tdgt lttd align"left"gtlt
item.Prod_Price gtlt/tdgt lttd align"left"gtlt
item.Order_Number gtlt/tdgt lttd align"left"gtlt
item.Order_Sign gtlt/tdgt lttd align"left"gtlt
item.Stat_Desc gtlt/tdgt lt/trgt lt end loop gt
lt/tablegt lt/formgt lt/bodygt lt/htmlgt
PSP des Detail-Frames
30
Ergebnis
Write a Comment
User Comments (0)
About PowerShow.com