NAME
Oracle::SQL::Builder - Perl extension for building SQL statements.
SYNOPSIS
use Oracle::SQL::Builder;
No automatically exported routines. You have to specifically to import the methods into your package.
use Oracle::SQL::Builder qw(:sql);
use Oracle::SQL::Builder /:sql/;
use Oracle::SQL::Builder ':sql';
DESCRIPTION
This is a package containing common sub routines that can be used in other programs.
new (%arg)
Input variables:
any input variable and value pairs
Variables used or routines called:
None
How to use:
my $obj = new Oracle::SQL; # or
my $obj = Oracle::SQL->new; # or
Return: new empty or initialized Oracle::SQL object.
Export Tag: sql
The :table tag includes sub-rountines for accessing Orable tables.
use Oracle::SQL::Builder qw(:sql);
It includes the following sub-routines:
build_sql_stmt($idn,$idv,$hrf,$dft,$acm)
Input variables:
$idn - id/key name
$idv - id/key value
$hrf - hash ref with column definition. It is from
getTableDef method
$dft - date format. Default to 'YYYYMMDD.HH24MISS'
$acm - add comma. If $acm = 1, then add a comma in
the end.
Variables used or routines called:
fmtTime - get current time
How to use:
my $cs = 'usr/pwd@db';
my $dbh = $self->getDBHandler($cs, "Oracle");
my $tab = "test_table";
my ($cns,$cd1,$hrf) = $self->getTableDef($dbh,$tab,'*','hash');
my $dft = 'YYYYMMDD.HH24MISS';
my $v = $self->build_sql_stmt('dept',10,$hrf,$dft);
Return: value string to be used in SQL statement.
Any undef or 'null' value of $idv will be translated to '' for insert_records method and 'null' for update_records so that the DBI can handle correctly.
build_sql_value($k,$v,$ar,$dft,$act)
Input variables:
$k - column name
$v - column value
$ar - hash ref for column definition: ${$ar}{$k}{$itm}.
It is from getTableDef with 'hash' type.
$dft - date format.
Default to 'YYYYMMDD.HH24MISS'? - not sure that we need
to do that.
It checks the dft in $ar for $k first;
If not, then call id_datetime_format to get a format
If not, then return undef.
$act - action: update|insert
Variables used or routines called:
id_datetime_format - get date and time format based on
the date and time value provided.
How to use:
my $cs = 'usr/pwd@db';
my $dbh = $self->getDBHandler($cs, "Oracle");
my $tab = "test_table";
my ($cns,$cd1,$ar) = $self->getTableDef($dbh,$tab,'*','hash');
my $dft = 'YYYYMMDD.HH24MISS';
my $v = $self->build_sql_value('dept',10,$ar,$dft);
Return: undef or value string to be used in SQL statement.
undef - value string can not be determined if no $k.
Do not use the column in your SQL statement.
'NULL' - null if $v is not defined and $v is not required.
"''" - empty string if $v is not defined and data type is CHAR
or VARCHAR and NOT NULL.
str - any value string: number or quoted string
This method returns the value with proper quotes and format string. For date datatype, it gets date and time format and use it in the TO_DATE function. If the $dft is provided or defined in the $ar for the column, then it convert the $v to the same format as defined in $dft if the $v has different date and time format.
build_sql_operator($k,$v,$ar)
Input variables:
$k - column name
$v - column value
$ar - hash ref for column definition: ${$ar}{$k}{$itm}.
It is from getTableDef with 'hash' type.
Variables used or routines called:
None
How to use:
my $cs = 'usr/pwd@db';
my $dbh = $self->getDBHandler($cs, "Oracle");
my $tab = "test_table";
my ($cns,$cd1,$ar) = $self->getTableDef($dbh,$tab,'*','hash');
my $v = $self->build_sql_operator('dept',10,$ar);
Return: SQL operator to be used in SQL statement.
undef - could not determine operator based on the inputs
Do not use the column in your SQL statement.
'LIKE' - match string with wild characters in $v.
'IN' - $v contains a list of values of string or number
separated by comma.
'=' - any number or quote strings
This method returns SQL operator based on column data type and the value in $v.
build_sql_where($str,$ar,$dft)
Input variables:
$str - a string with k1=v1,k2=v2,...
$ar - hash ref for column definition: ${$ar}{$k}{$itm}.
It is from get_table_definition with 'hash' type.
$dft - date format.
Default to 'YYYYMMDD.HH24MISS'? - not sure that we need
to do that.
It checks the dft in $ar for $k first;
If not, then call id_datetime_format to get a format
If not, then return undef.
Variables used or routines called:
None
How to use:
my $cs = 'usr/pwd@db';
my $dbh = $self->getDBHandler($cs, "Oracle");
my $tab = "test_table";
my ($cns,$cd1,$ar) = $self->getTableDef($dbh,$tab,'*','hash');
my $s = "id=1,ln=tu,fn=han";
my $whr = $self->build_sql_where($s,$ar,$dft);
Return: SQL WHERE clause
form_sql($dbh,$arf,$rtp)
Input variables:
$dbh - database handler
$arf - input array ref. It has the following elements:
act - SQL action such as SELECT, UPDATE, DELETE, etc.
tab - target table or view name
cns - column names separated by comma
where - condition array reference: ${$ar}[$i]{$itm}
$i is condition index number
$itm are:
cn - column name
op - operator such as =, <, >, in, lk, etc
cv - value, or values separated by comma
so - set operator such as AND or OR
group_by - a list of columns separated by comma
order_by - a list of columns separated by comma
data - data array reference ${$ar}{$cn}
dft - date format
rwd - right column width for formating sql statement
$rtp - return type: default - SQL statement string
where - just where clause
hash - hash array. It has
table - table name
cns - column specification such as '*' or column names
columns - column names. If '*', then all the column names.
select/update/delete - actions
from - from a table
where - where clause
group_by - group by clause
order_by - order by clause
sql - full SQL statement
hash_ref - hash array reference pointing to the above hash
sql - the whole SQL statement
Variables used or routines called:
echoMSG - echo message
isObjExist - check object existence
getTableDef - get table definitions
getTableData - get table data
How to use:
my $cs = 'usr/pwd@db';
my $dbh = $self->getDBHandler($cs, "Oracle");
my $drf = $self->getTableData($dbh,$srctab,'*','','hash');
my $arf = bless {}, ref($self)||$self;
${$arf}{act} = 'SELECT';
${$arf}{tab} = 'test_tab';
${$arf}{cns} = 'id,name';
${$arf}{data} = $drf;
my $tab = "test_table";
$self->form_sql($dbh,$arf);
Return: string, hash, hash ref based on return type.
split_cns($str,$len,$chr,$nbk)
Input variables:
$str - string with words or column names separated by comma
or by spliting character
$len - length allow in a line, default to 65
$chr - spliting character, default to comma
$nbk - number of blank space in from of each line.
If this is set, it will return a string with line breaks.
Variables used or routines called:
None
How to use:
my $cs = 'col1, col2, col3, this, is, a multiple,line';
my @a = $self->split_cns($cs,10);
Return: array with lines within length limit or a string.
genWhere($so,$cn,$op,$cv,$ar,$dft)
Input variables:
$so - set operator: AND, OR
$cn - column name
$op - operator: =, <=, >=, <>, lk, btw, in, nn, nl, etc.
$cv - column value
$ar - hash array ref: ${$ar}{$cn}{$itm}.
$itm: col, typ, wid, max. dec, req, min, dft, and dsp
$dft - date format
Variables used or routines called:
None
How to use:
my $whr = $self->build_where('','id','=',1);
$whr .= $self->build_where('Or','name','lk','A');
Return: string - where clause.
run_sql($dbh,$sfn)
Input variables:
$dbh - datebase handler or connection string
usr/pwd@db: for Oracle
$sfn - sql file name with full path
$hmd - home directory
Variables used or routines called:
None
How to use:
my $dbh = $self-?getDBHandler('usr/pwd@db');
my $sfn = '/my/dir/sqls/crt1.sql';
$self->run_sql($dbh, $sfn);
Return: the following status codes:
0 - ok;
1 - no DB handler
2 - inproper inputs
3 - sql not found
AUTHOR
Hanming Tu, hanming_tu@yahoo.com
SEE ALSO (some of docs that I check often)
Oracle::Trigger, Oracle:DDL, Oracle::DML, Oracle::DML::Common, Oracle::Loader, etc.