Upload
arnold-reuser
View
2.093
Download
5
Embed Size (px)
DESCRIPTION
Reusable plsql components to solve common technical problems.
Citation preview
PLSQL Commons v1.0 How to enrich the programmer's PLSQL toolkit
Arnold Reuser
PLSQL Commons v1.0
Agenda
Page 2
Serving a need
What PLSQL Commons can do for you
How you can make a difference
1
2
3
PLSQL Commons v1.0
Serving a need
PLSQL Commons is a project focused on creating and maintaining
reusable PLSQL components.
Components that will enrich the PLSQL programmer's toolkit
Components that promote the programmers shift from solving purely
technical problems to actual business problems
Page 3
Reusable PLSQL Components
PLSQL Commons v1.0
Serving a need
PLSQL Commons is used by a CRM service provider of General Motors
to handle their specific needs
Used on their production Oracle database servers as the defacto standard
components for the past three years
Page 4
Reusable PLSQL Components
PLSQL Commons v1.0
What PLSQL Commons can do for you
Current status
Practical applications
Page 5
PLSQL Commons v1.0 Page 6
Current Status
Component Focus
plsql_async Parallel processing of tasks
plsql_cache General purpose memory based caching
plsql_error Exception management
plsql_file Reading and writing operating system text files
plsql_ftp Copy a file from one host to another based on the ftp protocol.
plsql_host Executing a command in the host environment
plsql_log Logging application behavior
plsql_match Text search engine
plsql_test Writing repeatable unit tests
plsql_timeit Measuring the execution time of a program unit
plsql_util General purpose utilities
plsql_soap Lightweight webservices based on the soap protocol
There are several upcoming sandbox components not mentioned.
This presentation will focus on just a few components.
PLSQL Commons v1.0
Practical Applications
Imagine a potential pipeline of an ETL process to load CRM data.
The pipeline passes several processing elements.
Page 7
Parallel processing of tasks
PLSQL Commons v1.0
Practical Applications
If the elements Address and Communication are independent.
The pipeline could be organized to process these elements in parallel
Page 8
Parallel processing of tasks
PLSQL Commons v1.0
Practical Applications
Fundamental questions :
• How can you maintain the processing flow?
• What if Address and Communication would like to pass their identifiers?
Page 9
Parallel processing of tasks
PLSQL Commons v1.0
Practical Applications
The answers provided :
- plsql_async can be used to route and maintain the processing flow
- plsql_async can be used to pass information between sequential processes
- plsql_cache can be used to cache session and cross-session based information
Read the user guide for more details on this.
If your interest in building a processing flow. Read the book Enterprise Integration Patterns.
Page 10
Parallel processing of tasks
PLSQL Commons v1.0 Page 11
Practical Applications
Exception management
Assertion at any location you assume will not be reached.
gender char(1) := 'A';
plsql_test.assert(gender in ('M','F'),'Gender can be M or F; current value is {1}',varchars_t(gender));
Error to identify an exceptional condition that an application might want to catch
soapFaultReason varchar2(100) := ImportDataRecord has been invoked at an illegal or inappropriate time.';
err.raise(err.SOAPFaultException,'operation raised exception : {1}',varchars_t(soapFaultReason));
PLSQL Commons v1.0
Practical Applications
plsql_test is a testing facility for the plsql programming
plsql_test will help you :
- measure your progress, spot unintended side effects, and focus your
development efforts
- without automated testing tools like this facility retesting can be a tedious and
inaccurate process.
- by allowing the testing process to occur frequently and automatically, you can
keep software coding errors at a minimum
Page 12
Testing application behavior
PLSQL Commons v1.0 Page 13
Practical Applications
Testing application behavior
Developing a test suite
create package body test_plsql_util_pck
as
procedure t_varchars
is
vt1 varchars_t:= new varchars_t('A','B');
begin
plsql_test.assert(vt1.count = 2,'list contains only two elements');
end;
procedure t_isWhiteSpace
is
cause varchar2(2000) := 'incorrect implementation of contract';
begin
plsql_test.assert(putil.isWhiteSpace(' '),cause); -- a space is whitespace
plsql_test.assert(not putil.isWhiteSpace(null),cause); -- null is not whitespace
plsql_test.assert(not putil.isWhiteSpace(''),cause); -- empty string is not whitespace
end;
end;
Each and every package can become a test suite.
- Just add a few procedures with prefix t_ to turn it into a test suite.
- Once that's done. It can be run as a test suite.
PLSQL Commons v1.0 Page 14
Practical Applications
Testing application behavior
Running a test suite
plsql_test.runTestSuite
( module => 'test_plsql_util_pck
, runAll => true
);
DBMS Output
===== Run Test Suite ====
unit TST_PLSQL_UTIL_PCK.T_ISWHITESPACE succeeded
unit TST_PLSQL_UTIL_PCK.T_VARCHARS succeeded
===== Test Report =====
Run 2 tests of which 2 succeeded and 0 failed
PLSQL Commons v1.0 Page 15
Practical Applications
Logging application behavior
DBMS Output
20110113-10:47:45.228 INFO gender is M
Sneak Preview
plog.turn_on;
gender char(1) := 'M';
plog.info('gender is {1}',varchars_t(gender));
Logging supports
- Different layout types : text, rich_text, custom
- Different output types : dbms_pipe, dbms_output, http, table
- Different levels of logging : trace, debug, info, info, warn, error, fatal
Read the userguide for more details on this.
PLSQL Commons v1.0 Page 16
Practical Applications
Measuring application behavior
Sneak Preview
number idx;
plsql_timeit.remove;
plsql_timeit.start_watch(pp_context => 'assignment');
idx := 1;
plsql_timeit.stop_watch(pp_context => 'assignment');
plog.info('took {1} millisec',varchars_t(mmit_plsql_timeit_pck.period(pp_context => 'assignment',pp_total => true));
plsql_timeit is a facility to measure the execution time of a program unit
- measure if the execution time of your code is fit for use
plsql_timeit and plsql_test could be combined to introduce
load, volume, overload and stress test functionality.
PLSQL Commons v1.0 Page 17
Practical Applications
General purpose utilities
Sneak Preview
var varchar2(200) := chr(10); -- new line
isWhiteSpace boolean := putil.isWhiteSpace(var);
plog.info(putil.toChar(isWhiteSpace));
The standard libraries fail to provide enough general purpose methods.
plsql_util provides these methods
PLSQL Commons v1.0 Page 18
Practical Applications
General purpose utilities
Sneak Preview
list StringList := new StringList('el2','el1');
list := putil.sort(list);
val varchar2(32767) := putil.join(list,'#');
list := putil.split(val,'#');
The standard libraries fail to provide enough general purpose methods.
plsql_util provides these methods
PLSQL Commons v1.0 Page 19
Practical Applications
General purpose utilities
Sneak Preview
list StringList := new StringList('el2','el1');
list := putil.sort(list);
val varchar2(32767) := putil.join(list,'#');
list := putil.split(val,'#');
The standard libraries fail to provide enough general purpose methods.
plsql_util provides these methods
PLSQL Commons v1.0
How you can make a difference
Give it a try
Be a happy user
Tell us and the whole wide world about it!
If you would like to get in touch.
Drop me a mail at [email protected]
Page 20
PLSQL Commons v1.0 Page 21
We would be happy to help.
Do You Have
Any Questions?