+ All Categories
Home > Technology > Plsql commons

Plsql commons

Date post: 01-Dec-2014
Category:
Upload: arnold-reuser
View: 2,073 times
Download: 5 times
Share this document with a friend
Description:
Reusable plsql components to solve common technical problems.
21
PLSQL Commons v1.0 How to enrich the programmer's PLSQL toolkit Arnold Reuser
Transcript
Page 1: Plsql commons

PLSQL Commons v1.0 How to enrich the programmer's PLSQL toolkit

Arnold Reuser

Page 2: Plsql commons

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

Page 3: Plsql commons

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

Page 4: Plsql commons

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

Page 5: Plsql commons

PLSQL Commons v1.0

What PLSQL Commons can do for you

Current status

Practical applications

Page 5

Page 6: Plsql commons

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.

Page 7: Plsql commons

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

Page 8: Plsql commons

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

Page 9: Plsql commons

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

Page 10: Plsql commons

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

Page 11: Plsql commons

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));

Page 12: Plsql commons

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

Page 13: Plsql commons

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.

Page 14: Plsql commons

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

Page 15: Plsql commons

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.

Page 16: Plsql commons

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.

Page 17: Plsql commons

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

Page 18: Plsql commons

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

Page 19: Plsql commons

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

Page 20: Plsql commons

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

Page 21: Plsql commons

PLSQL Commons v1.0 Page 21

We would be happy to help.

Do You Have

Any Questions?


Recommended