CONECTAREA LA ALTE PRODUSE ORACLE
Scopurile capitolului:
Aceasta sectiune discuta cum se poate lega SQL*Forms cu o
varietate de alte produse.
Produsele implicate sunt:
- SQL*ReportWriter
- programe scrise in limbajul C
- SQL*TextRetrieval
- PRO*Oracle
- Oracle*Terminal
Conectarea la SQL*ReportWriter
Utilizati procedura "packaged" HOST pentru a chema:
- SQL*ReportWriter run-time engine
- SQL*ReportWriter design-time engine
--------------------------------------------------------------
| Action Query Group Field Summary Text Report Parameter Help |
| |New |===========SQL*ReportWriter====================== |
| |Open | |
| |Copy | |
| |Rename | |
| |Drop | |
| |Execute | |
| |Generate | |
| |Quit | |
| --------- |
| |
| |
| |
| Create a new report |
| Report Name: Replace |
--------------------------------------------------------------
Nu se poate invoca SQL*Forms din SQL*ReportWriter.
Conectarea la SQL*ReportWriter
Utilizati procedura HOST pentru a chema SQL*ReportWriter.
Puteti chema SQL*ReportWriter run-time engine si
SQL*ReportWriter design-time engine din SQL*Forms (RunForm)
utilizand procedura HOST.
Exemple:
- Pentru a porni SQL*ReportWriter design-time engine fara
parametri:
HOST ('SQLREP');
- Urmatoarea comanda porneste SQL*ReportWriter run-time
engine si paseaza parametri pentru RUNREP:
HOST ('RUNREP demo_rep scott/tiger depno=10');
- Se pot defini variabile sau variabile globale PL/SQL si
acestea sa fie alocate comenzii RUNREP:
:global.runrep := 'RUNREP demo_rep scott/tiger deptno=' ||
TO_CHAR (:dept.deptno);
- Dupa ce ati definit global.runrep, trigger-ul poate
invoca SQL*ReportWriter cu urmatorul apel:
HOST (:global.runrep);
Nu puteti invoca SQL*Forms din SQL*ReportWriter.
Conectarea la alte produse Oracle
- SQL*Plus
- procedura packaged HOST realizeaza conectarea la
SQL*Plus;
- comanda RUNFORM realizeaza conectarea de la SQL*Plus
la SQL*Forms;
- Apelarea formelor din programe C
- Apelarea rutinelor PRO*Precompiled
- foloseste procedura packaged USER_EXIT
Conectarea la alte produse Oracle
SQL*Plus
Este posibila conectarea la SQL*Plus prin folosirea
procedurii packaged HOST.
Urmatorul exemplu realizeaza logarea in SQL*Plus, ruleaza
raportul ORDERRPT, furnizeaza valorile de 10 si 20 pentru
parametri &1 si &2 ai raportului:
HOST ('SQLPLUS scott/tiger orderrpt 10 20');
Folosind comanda RUNFORM se poate apela SQL*Forms din
SQL*Plus. La folosirea comenzii RUNFORM, trebuie omise id-ul
utilizator si parola deoarece RUNFORM accepta doar informatiile
curente de login. Deoarece se evita o logare separata la ORACLE,
accesarea unei forme din SQL*Plus este mai rapida decat de la
linia de comanda. (Atentie: disponibilitatea comenzii RUNFORM
depinde de modul in care a fost instalat SQL*Plus).
Apelarea formelor din programe C
Este posibila apelarea unei aplicatii SQL*Forms dintr-un
program scris in limbajul C folosind comanda IAPCAL. Sintaxa
comenzii IAPCAL permite specificarea unei comenzi linie standard
RUNFORM mai putin cuvantul cheie RUNFORM si id-ul utilizator si
parola. Utilizatorul trebuie sa se logheze explicit la baza de
date dupa executia comenzii IAP.
Exemplu: Urmatoarea declaratie ruleaza forma ORDER_ENTRY cu
optiunile -a, -b si -d:
int iapcal ("-abd order_entry");
Apelarea rutinelor PRO*Precompiled ("User Exits")
SQL*Forms poate accesa orice rutina precompilata creata cu
versiunea 1.3 (sau ulterioara) a unui precompilator Oracle.
Foloseste procedura packaged USER_EXIT pentru a apela rutina.
SQL*TextRetrieval
- Ce este SQL*TextRetrieval?
- stocheaza, gestioneaza si recupereaza informatie
textuala
- opereaza cu date structurate si nestructurate
- ofera facilitati pentru administrarea si accesarea
unui text
- limbaj extins de recuperare ("retrieval") informatie
- wildcards
- cautare fonetica si aproximativa
- sinonime, termeni cu sens mai larg, termeni cu sens
restrans
- Dezvoltarea aplicatiilor
- trigger-ii pot apela iesiri utilizator ("user exits")
sau programe PRO*C
SQL*TextRetrieval
Ce este SQL*TextRetrieval?
SQL*TextRetrieval ofera un sistem pentru stocarea,
gestionarea si recuperarea ("retrieval") materialului text. O
facilitate cheie este aceea ca un text poate fi tinut intr-un
format nestructurat si utilizatorul il poate recupera din
materialul nestructurat cat si din datele structurate.
Ar fi ineficient sa se caute in materialul nestructurat de
fiecare data cand il utilizeaza cineva, asa cum se intampla la un
editor. SQL*TextRetrieval permite utilizatorului sa construiasca
si sa recupereze informatia din indexuri de text.
SQL*TextRetrieval ofera extensii la standardul SQL si
permite utilizatorului sa acceseze textul prin interogari care
pot fi formulate simplu. Aceasta nu necesita schimbari in Oracle
RDBMS. Facilitatile de "text retrieval" sunt integrate in
kernelul Oracle si informatiile structurate si nestructurate sunt
depozitate in aceeasi baza de date.
Limbaj extins de recuperare text("retrieval")
SQL*TextRetrieval ofera clauza CONTAINS suplimentar la
limbajul SQL, clauza care faciliteaza recuperarea datelor text.
Interogarile pot fi realizate si pe campuri structurate ale bazei
de date si pe text:
SELECT *
FROM text_table
WHERE author = 'S.HAWKINS'
AND text_column CONTAINS 'DATA'
Limbajul extins de retrieval SQL*TextRetrieval permite
logica booleana, wildcards, cautare fonetica si aproximativa.
Este posibila de asemenea legarea sinonimelor, termenilor cu
inteles mai larg, termenilor cu inteles restrans si o varietate
de termeni mai slab legati.
Dezvoltarea de aplicatii
SQL*TextRetrieval permite dezvoltarea de aplicatii in
SQL*Forms, fie prin folosirea unui set de iesiri utilizator
("user exits") fie prin scrierea unor programe PRO*C utilizand un
set echivalent de functii C. Iesirile utilizator dau
posibilitatea utilizatorului sa opereze interogari text (create,
edit, drop, load, refine, save, etc) si sa le execute.
SQL*TextRetrieval versiunea 1.1.7 sau ulterioare suporta
SQL*Forms versiunea 3.
User exits (iesirile utilizator)
- Ce este o iesire utilizator?
- o rutina 3GL
- legata intr-un executabil Runform
- apelabila din orice forma
- Pentru a apela o iesire utilizator:
User_Exit ('fred');
User exits (iesirile utilizator)
O iesire utilizator este o bucata de logica 3GL, scrisa de
obicei intr-unul din limbajele pentru care Oracle are
precompilator:
COBOL
PASCAL
ADA
FORTRAN
PL1
C
Dupa ce codul iesirii utilizator este scris si compilat,
trebuie "legat" la programul Runform (fisierul executabil pe care
il apelati cand dati comanda Runform). Cu alte cuvinte,
iesirile utilizator se gasesc intr-o biblioteca externa oricarei
forme particulare. (Consultati "Oracle installation reference"
pentru tipul dumneavoastra de hardware pentru detalii privind
legarea iesirilor utilizator).
Dupa legare, o puteti apela din orice forma prin procedura
User_Exit:
User_Exit ('fred');
Sintaxa completa pentru chemarea iesirilor utilizator:
USER_EXIT (user_exit_string [,error_string]);
unde:
user_exit_string specifica numele iesirii utilizator si
orice parametri care trebuiesc dati
error_string un mesaj de eroare care va fi afisat
daca apelul iesirii utilizator nu
reuseste
Exemplu:
USER_EXIT ('fred BISTO '||:stats.year_to_date, 'Statistics
unavailable');
NOTA: SQL*Forms (Runform) poate fi legata la iesiri
utilizator din Oracle Interface Call, precum si la iesiri
utilizator non-Oracle.
Argumente PRO si CONTRA iesirilor utilizator
- De ce sa scrieti user exits (iesiri utilizator)?
- pentru a accesa o baza de date non-Oracle
- pentru a scrie informatii intr-un fisier din SQL*Forms
- pentru a prelucra colectii de date
- pentru a reduce dimensiunea fisierelor .FRM
- Dezavantaje:
- trebuie recompilate sau legate din nou cand codul se
modifica sau cand se realizeaza upgrade la Oracle sau
sistemul de operare
- portabilitatea este diminuata
- intretinerea este mai dificila.
De ce sa scrieti iesiri utilizator?
Inaintea versiunii 3, triger-ii SQL*Forms nu erau scrisi in
PL/SQL si de aceea lipsea logica procedurala disponibila in
prezent la triger-ii V3. Proiectantii scriau frecvent iesiri
utilizator pentru a avea proceduri 3GL care realizau procesari
care altfel erau ineficiente sau imposibile prin triger-i.
Prin aparitia lui PL/SQL, numarul e motive pentru iesirile
utilizator s-a diminuat simtitor. Mai exista unele avantaje care
sunt enumerate:
Iesirile utilizator:
- pot citi si opera cu date din baze de date non-Oracle
- pot scrie informatie intr-un fisier din SQL*Forms
- pot opera "data arrays" (iesirile utilizator pot opera
colectii de date care sunt citite direct din fisiere. Ca
un trigger, o iesire utilizator nu poate trata datele
dintr-o forma ca o colectie. Numai inregistrarea curenta
poate fi incarcata si modificata
- reduc dimensiunea fisierelor .FRM
Dezavantaje:
- la fiecare modificare a iesirii utilizator trebuie
recompilata si legat codul
- portabilitatea formei este diminuata
- intretinerea este mai dificila.
Ce este Oracle*Terminal?
- O facilitate "screen-based"
- Permite sa creati/modificati:
- atributele video
- functiile cheilor
- Independent de RDBMS Oracle:
- folosirea unui fisier resursa binar:
oraterm.r
- Are aparitie standard Oracle