48
Perl DBI Perl DBI Raghavedra Raghavedra

Perl DBI

Embed Size (px)

DESCRIPTION

Perl DBI

Citation preview

Page 1: Perl DBI

Perl DBIPerl DBI

RaghavedraRaghavedra

Page 2: Perl DBI

ContentsContents Architecture of a DBI ApplicationArchitecture of a DBI Application Notation and ConventionsNotation and Conventions Database ConnectionDatabase Connection INSERT OperationINSERT Operation Using Bind ValuesUsing Bind Values READ OperationREAD Operation UPDATE OperationUPDATE Operation DELETE OperationDELETE Operation COMMIT OperationCOMMIT Operation ROLLBACK OperationROLLBACK Operation Begin TransactionBegin Transaction Auto Commit OptionAuto Commit Option Automatic Error HandlingAutomatic Error Handling Disconnecting DatabaseDisconnecting Database Using NULL valuesUsing NULL values

Page 3: Perl DBI

What's DBI?What's DBI? DBI stands for Database independent interface DBI stands for Database independent interface

for Perl which means DBI provides an for Perl which means DBI provides an abstraction layer between the Perl code and the abstraction layer between the Perl code and the underlying database, allowing you to switch underlying database, allowing you to switch database implementations really easily. database implementations really easily.

The DBI is a database access module for the The DBI is a database access module for the Perl programming language. It defines a set of Perl programming language. It defines a set of methods, variables, and conventions that methods, variables, and conventions that provide a consistent database interface, provide a consistent database interface, independent of the actual database being used. independent of the actual database being used.

Page 4: Perl DBI

Architecture of a DBI ApplicationArchitecture of a DBI Application

DBI is independent of any database DBI is independent of any database available in backend. You can use DBI available in backend. You can use DBI whether you are working with Oracle, whether you are working with Oracle, MySQL or Informix etc. This is clear from MySQL or Informix etc. This is clear from the following architecture diagram.the following architecture diagram.

Page 5: Perl DBI
Page 6: Perl DBI

What DBI Does ?What DBI Does ?

Here DBI is responsible of taking all SQL Here DBI is responsible of taking all SQL commands through the API, or Application commands through the API, or Application Programming Interface, and to dispatch Programming Interface, and to dispatch them to the appropriate driver for actual them to the appropriate driver for actual execution. And finally DBI is responsible of execution. And finally DBI is responsible of taking results from the driver and giving taking results from the driver and giving back it to the calling script. back it to the calling script.

Page 7: Perl DBI

Notation and ConventionsNotation and Conventions

$dsn Database source name $dsn Database source name

$dbh Database handle object $dbh Database handle object

$sth Statement handle object $sth Statement handle object

$h Any of the handle types above ($dbh, $sth, or $drh) $h Any of the handle types above ($dbh, $sth, or $drh) $rc General Return Code (Boolean: true=ok, false=error)$rc General Return Code (Boolean: true=ok, false=error)

$rv General Return Value (typically an integer) $rv General Return Value (typically an integer)

Page 8: Perl DBI

Notation and ConventionsNotation and Conventions

@ary List of values returned from the database. @ary List of values returned from the database.

$rows Number of rows processed (if available, else -1)$rows Number of rows processed (if available, else -1)

$fh A filehandle $fh A filehandle

undef NULL values are represented by undefined values undef NULL values are represented by undefined values in Perl in Perl

\%attr Reference to a hash of attribute values passed to \%attr Reference to a hash of attribute values passed to method method

Page 9: Perl DBI

Database ConnectionDatabase Connection

Assuming we are going to work with Sybase database. Assuming we are going to work with Sybase database. Before connecting to a database make sure followings:Before connecting to a database make sure followings:

You have created a database TESTDB.You have created a database TESTDB. You have created TEST_TABLE in TESTDB.You have created TEST_TABLE in TESTDB. This table is having fields FIRST_NAME, LAST_NAME, This table is having fields FIRST_NAME, LAST_NAME,

AGE, SEX and INCOME.AGE, SEX and INCOME. User ID "testuser" and password "test123" are set to User ID "testuser" and password "test123" are set to

access TESTDBaccess TESTDB Perl Module DBI is installed properly on your machine.Perl Module DBI is installed properly on your machine. You have gone through Sybase tutorial to understand You have gone through Sybase tutorial to understand

Sybase Basics.Sybase Basics. Following is the example of connecting with Sybase Following is the example of connecting with Sybase

database "TESTDB"database "TESTDB"

Page 10: Perl DBI

Database ConnectionDatabase Connection

#!/usr/bin/perl#!/usr/bin/perluse DBIuse DBIuse strict;use strict;

my $driver = “Sybase"; my $driver = “Sybase"; my $database = "TESTDB";my $database = "TESTDB";my $userid = "testuser";my $userid = "testuser";my $password = "test123";my $password = "test123";my $dbh = DBI->connect ("dbi: $driver :$database", my $dbh = DBI->connect ("dbi: $driver :$database",

"$userid", "$password") "$userid", "$password") or die $DBI::errstr;or die $DBI::errstr;

Page 11: Perl DBI

Database ConnectionDatabase Connection If a connection is established with the data If a connection is established with the data

source then a Database Handle is source then a Database Handle is returned and saved into $dbh for further returned and saved into $dbh for further use otherwise $dbh is set to use otherwise $dbh is set to undefundef value value and $DBI:: errstr returns an error string. and $DBI:: errstr returns an error string.

Page 12: Perl DBI

INSERT OperationINSERT Operation

INSERT operation is required when you want to INSERT operation is required when you want to create your records into TEST_TABLE. create your records into TEST_TABLE.

So once our database connection is established, So once our database connection is established, we are ready to create records into we are ready to create records into TEST_TABLE. TEST_TABLE.

Following is the procedure to create single Following is the procedure to create single

record into TEST_TABLE. You can create many record into TEST_TABLE. You can create many records in similar fashion. records in similar fashion.

Page 13: Perl DBI

Insert record Contd..Insert record Contd.. Record creation takes following stepsRecord creation takes following steps

Preparing SQL statement with INSERT statement. This will be done Preparing SQL statement with INSERT statement. This will be done using using prepare()prepare() API. API.

Executing SQL query to select all the results from the database. Executing SQL query to select all the results from the database. This will be done using This will be done using execute()execute() API. API.

Releasing Statement handle. This will be done using Releasing Statement handle. This will be done using finish()finish() API API

If everything goes fine then If everything goes fine then commitcommit this operation otherwise you this operation otherwise you can can rollbackrollback complete transaction. Commit and Rollback are complete transaction. Commit and Rollback are explained in next sections.explained in next sections.

Page 14: Perl DBI

Insert Contd..Insert Contd.. my $sth = $dbh->prepare ("INSERT INTO my $sth = $dbh->prepare ("INSERT INTO

TEST_TABLE (FIRST_NAME, LAST_NAME, TEST_TABLE (FIRST_NAME, LAST_NAME, SEX, AGE, INCOME ) SEX, AGE, INCOME )

values ('john', 'poul ', 'M', 30, 13000)"); values ('john', 'poul ', 'M', 30, 13000)"); $sth->execute() or die $DBI::errstr; $sth-$sth->execute() or die $DBI::errstr; $sth-

>finish(); >finish();

$dbh->commit or die $DBI::errstr; $dbh->commit or die $DBI::errstr;

Page 15: Perl DBI

Using Bind ValuesUsing Bind Values

There may be a case when values to be There may be a case when values to be entered is not given in advance.entered is not given in advance.

In such case binding values are used.In such case binding values are used. A question mark is used in place of actual A question mark is used in place of actual

value and then actual values are passed value and then actual values are passed through execute() API. through execute() API.

Following is the example. Following is the example.

Page 16: Perl DBI

Using Bind ValuesUsing Bind Values my $first_name = "john"; my $first_name = "john"; my $last_name = "poul"; my $last_name = "poul"; my $sex = "M"; my $sex = "M"; my $income = 13000; my $income = 13000; my $age = 30; my $age = 30; my $sth = $dbh->prepare(“ INSERT INTO TEST_TABLE my $sth = $dbh->prepare(“ INSERT INTO TEST_TABLE

(FIRST_NAME, LAST_NAME, SEX, AGE, INCOME ) (FIRST_NAME, LAST_NAME, SEX, AGE, INCOME ) values (?,?,?,?,?)"); values (?,?,?,?,?)");

$sth->execute( $first_name, $last_name, $sex, $age, $sth->execute( $first_name, $last_name, $sex, $age, $income) or die $DBI::errstr; $sth->finish(); $income) or die $DBI::errstr; $sth->finish();

$dbh->commit or die $DBI::errstr; $dbh->commit or die $DBI::errstr;

Page 17: Perl DBI

READ OperationREAD Operation

READ Operation on any databases means to READ Operation on any databases means to fetch some useful information from the fetch some useful information from the database. database.

So once our database connection is established, So once our database connection is established,

we are ready to make a query into this database. we are ready to make a query into this database. Following is the procedure to query all the Following is the procedure to query all the

records having AGE greater than 20. This will records having AGE greater than 20. This will take four steps take four steps

Page 18: Perl DBI

Read Contnd..Read Contnd.. Preparing SQL query based on required Preparing SQL query based on required

conditions. This will be done using conditions. This will be done using prepare()prepare() API.API.

Executing SQL query to select all the results Executing SQL query to select all the results from the database. This will be done using from the database. This will be done using execute()execute() API. API.

Fetching all the results one by one and printing Fetching all the results one by one and printing those results. This will be done using those results. This will be done using fetchrow_array()fetchrow_array() API. API.

Releasing Statement handle. This will be done Releasing Statement handle. This will be done using using finish()finish() API API

Page 19: Perl DBI

Read Contnd..Read Contnd.. my $sth = $dbh->prepare ("SELECT FIRST_NAME, LAST_NAME my $sth = $dbh->prepare ("SELECT FIRST_NAME, LAST_NAME

FROM TEST_TABLE WHERE AGE > 20");FROM TEST_TABLE WHERE AGE > 20"); $sth->execute() or die $DBI::errstr; $sth->execute() or die $DBI::errstr; print "Number of rows found :" + $sth->rows; print "Number of rows found :" + $sth->rows; while (my @row = $sth->fetchrow_array()) { while (my @row = $sth->fetchrow_array()) { my ($first_name, $last_name ) = @row; my ($first_name, $last_name ) = @row; print "First Name = $first_name, print "First Name = $first_name, Last Name = $last_name\n";Last Name = $last_name\n"; } } $sth->finish(); $sth->finish();

Page 20: Perl DBI

Using Bind ValuesUsing Bind Values

There may be a case when condition is There may be a case when condition is not given in advance.not given in advance.

In such case binding values are used. A In such case binding values are used. A question mark is used in place of actual question mark is used in place of actual value and then actual value is passed value and then actual value is passed through through execute()execute() API. Following is the API. Following is the example. example.

Page 21: Perl DBI

Bind Val Contd..Bind Val Contd.. $age = 20; $age = 20; my $sth = $dbh->prepare(“ SELECT FIRST_NAME, LAST_NAME my $sth = $dbh->prepare(“ SELECT FIRST_NAME, LAST_NAME

FROM TEST_TABLE WHERE AGE > FROM TEST_TABLE WHERE AGE > ??"); "); $sth->execute( $age ) or die $DBI::errstr; $sth->execute( $age ) or die $DBI::errstr; print "Number of rows found :" + $sth->rows; print "Number of rows found :" + $sth->rows; while (my @row = $sth->fetchrow_array()) { while (my @row = $sth->fetchrow_array()) { my ($first_name, $last_name ) = @row; my ($first_name, $last_name ) = @row; print "First Name = $first_name, Last Name = $last_name\n"; print "First Name = $first_name, Last Name = $last_name\n"; } }

$sth->finish(); $sth->finish();

Page 22: Perl DBI

UPDATE OperationUPDATE Operation

UPDATE Operation on any databases UPDATE Operation on any databases means to update one or more records means to update one or more records already available in the database.already available in the database.

Following is the procedure to update all Following is the procedure to update all the records having SEX as 'M'. Here we the records having SEX as 'M'. Here we will increase AGE of all the males by one will increase AGE of all the males by one year. year.

This will take three steps This will take three steps

Page 23: Perl DBI

Update Contd..Update Contd.. Preparing SQL query based on required Preparing SQL query based on required

conditions. This will be done using conditions. This will be done using prepare()prepare() API.API.

Executing SQL query to select all the results Executing SQL query to select all the results from the database. This will be done using from the database. This will be done using execute()execute() API. API.

Releasing Statement handle. This will be done Releasing Statement handle. This will be done using using finish()finish() API API

If everything goes fine then If everything goes fine then commitcommit this this operation otherwise you can operation otherwise you can rollbackrollback complete complete transaction. See next section for commit and transaction. See next section for commit and rollback APIs.rollback APIs.

Page 24: Perl DBI

Update Contd..Update Contd.. my $sth = $dbh->prepare ("UPDATE my $sth = $dbh->prepare ("UPDATE

TEST_TABLE SET AGE = AGE + 1 WHERE TEST_TABLE SET AGE = AGE + 1 WHERE SEX = 'M'"); SEX = 'M'");

$sth->execute() or die $DBI::errstr; $sth->execute() or die $DBI::errstr; print "Number of rows updated :" + $sth->rows; print "Number of rows updated :" + $sth->rows; $sth->finish(); $sth->finish(); $dbh->commit or die $DBI::errstr; $dbh->commit or die $DBI::errstr;

Page 25: Perl DBI

Using Bind ValuesUsing Bind Values

$sex = 'M'; $sex = 'M'; my $sth = $dbh->prepare( "UPDATE my $sth = $dbh->prepare( "UPDATE

TEST_TABLE SET AGE = AGE + 1 WHERE TEST_TABLE SET AGE = AGE + 1 WHERE SEX = SEX = ??"); ");

$sth->execute ('$sex') or die $DBI::errstr; $sth->execute ('$sex') or die $DBI::errstr; print "Number of rows updated :" + $sth->rows; print "Number of rows updated :" + $sth->rows; $sth->finish();$sth->finish(); $dbh->commit or die $DBI::errstr; $dbh->commit or die $DBI::errstr;

Page 26: Perl DBI

DELETE OperationDELETE Operation

DELETE operation is required when you DELETE operation is required when you want to delete some records from your want to delete some records from your database. database.

Following is the procedure to delete all the Following is the procedure to delete all the

records from TEST_TABLE where AGE is records from TEST_TABLE where AGE is equal to 30. equal to 30.

This operation will take following steps. This operation will take following steps.

Page 27: Perl DBI

Delete Contd..Delete Contd.. Preparing SQL query based on required Preparing SQL query based on required

conditions. This will be done using conditions. This will be done using prepare()prepare() API.API.

Executing SQL query to delete required records Executing SQL query to delete required records from the database. This will be done using from the database. This will be done using execute()execute() API. API.

Releasing Statement handle. This will be done Releasing Statement handle. This will be done using using finish()finish() API API

If everything goes fine then If everything goes fine then commitcommit this this operation otherwise you can operation otherwise you can rollbackrollback complete complete transaction.transaction.

Page 28: Perl DBI

Delete Contd..Delete Contd.. $age = 30; $age = 30; my $sth = $dbh->prepare( "DELETE FROM my $sth = $dbh->prepare( "DELETE FROM

TEST_TABLE WHERE AGE = TEST_TABLE WHERE AGE = ??"); "); $sth->execute( $age ) or die $DBI::errstr; $sth->execute( $age ) or die $DBI::errstr; print "Number of rows deleted :" + $sth->rows; print "Number of rows deleted :" + $sth->rows;

$sth->finish();$sth->finish(); $dbh->commit or die $DBI::errstr; $dbh->commit or die $DBI::errstr;

Page 29: Perl DBI

Using do StatementUsing do Statement

If you're doing an UPDATE, INSERT, or DELETE there is no data If you're doing an UPDATE, INSERT, or DELETE there is no data that comes back from the database, so there is a short cut to that comes back from the database, so there is a short cut to perform this operation. perform this operation.

You can use You can use dodo statement to execute any of the command as statement to execute any of the command as follows.follows.

$dbh->do(‘ DELETE FROM TEST_TABLE WHERE age =30'); $dbh->do(‘ DELETE FROM TEST_TABLE WHERE age =30');

dodo returns a true value if it succeeded, and a false value if it failed. returns a true value if it succeeded, and a false value if it failed. Actually, if it succeeds it returns the number of affected rows. In the Actually, if it succeeds it returns the number of affected rows. In the example it would return the number of rows that were actually example it would return the number of rows that were actually deleted.deleted.

Page 30: Perl DBI

COMMIT OperationCOMMIT Operation

Commit is the operation which gives a Commit is the operation which gives a green signal to database to finalize the green signal to database to finalize the changes and after this operation no changes and after this operation no change can be reverted back.change can be reverted back.

Here is a simple example to call Here is a simple example to call commitcommit

API.API. $dbh->commit or die $dbh->errstr; $dbh->commit or die $dbh->errstr;

Page 31: Perl DBI

ROLLBACK OperationROLLBACK Operation

If you are not satisfied with all the changes If you are not satisfied with all the changes and you want to revert back those and you want to revert back those changes then use changes then use rollbackrollback API. API.

Here is a simple example to call Here is a simple example to call rollbackrollback

API.API. $dbh->rollback or die $dbh->errstr; $dbh->rollback or die $dbh->errstr;

Page 32: Perl DBI

Begin TransactionBegin Transaction

Many databases support transactions. Many databases support transactions. This means that you can make a whole bunch of queries This means that you can make a whole bunch of queries

which would modify the databases, but none of the which would modify the databases, but none of the changes are actually made.changes are actually made.

Then at the end you issue the special SQL query Then at the end you issue the special SQL query

COMMIT, and all the changes are made simultaneously. COMMIT, and all the changes are made simultaneously.

Alternatively, you can issue the query ROLLBACK, in Alternatively, you can issue the query ROLLBACK, in which case all the queries are thrown away.which case all the queries are thrown away.

Page 33: Perl DBI

Transaction Contd..Transaction Contd.. begin_workbegin_work API enables transactions (by API enables transactions (by

turning AutoCommit off) until the next call to turning AutoCommit off) until the next call to commit or rollback. commit or rollback.

After the next commit or rollback, AutoCommit After the next commit or rollback, AutoCommit will automatically be turned on again.will automatically be turned on again.

$rc = $dbh->begin_work or die $dbh->errstr; $rc = $dbh->begin_work or die $dbh->errstr;

Page 34: Perl DBI

AutoCommit OptionAutoCommit Option

If your transactions are simple, you can If your transactions are simple, you can save yourself from the trouble of having to save yourself from the trouble of having to issue a lot of commits. issue a lot of commits.

When you make the connect call, you can When you make the connect call, you can specify an AutoCommit option which will specify an AutoCommit option which will perform an automatic commit operation perform an automatic commit operation after every successful query. Here's what after every successful query. Here's what it looks like:it looks like:

Page 35: Perl DBI

Autocommit Contnd..Autocommit Contnd..

my $dbh = DBI->connect ($dsn, $userid, my $dbh = DBI->connect ($dsn, $userid, $password, {AutoCommit => 1}) or die $password, {AutoCommit => 1}) or die $DBI::errstr; $DBI::errstr;

Here AutoCommit can take value 1 or 0.Here AutoCommit can take value 1 or 0.

Page 36: Perl DBI

Automatic Error HandlingAutomatic Error Handling

When you make the connect call, you can When you make the connect call, you can specify a RaiseErrors option that handles errors specify a RaiseErrors option that handles errors for you automatically. for you automatically.

When an error occurs, DBI will abort your When an error occurs, DBI will abort your

program instead of returning a failure code. program instead of returning a failure code.

If all you want is to abort the program on an If all you want is to abort the program on an error, this can be convenient. error, this can be convenient.

Here's what it looks like:Here's what it looks like:

Page 37: Perl DBI

Automatic ErrorAutomatic Error my $dbh = DBI->connect ($dsn, $userid, my $dbh = DBI->connect ($dsn, $userid,

$password, {RaiseError => 1}) or die $password, {RaiseError => 1}) or die $DBI::errstr; $DBI::errstr;

Here RaiseError can take value 1 or 0.Here RaiseError can take value 1 or 0.

Page 38: Perl DBI

Disconnecting DatabaseDisconnecting Database

To disconnect Database connection, use To disconnect Database connection, use disconnectdisconnect API. API.

$rc = $dbh->disconnect or warn $dbh-$rc = $dbh->disconnect or warn $dbh->errstr; >errstr;

Page 39: Perl DBI

DisconnectDisconnect The transaction behavior of the disconnect The transaction behavior of the disconnect

method is, sadly, undefined. method is, sadly, undefined. Some database systems (such as Oracle and Some database systems (such as Oracle and

Ingres) will automatically commit any Ingres) will automatically commit any outstanding changes, but others (such as outstanding changes, but others (such as Informix) will rollback any outstanding changes. Informix) will rollback any outstanding changes. Applications not using AutoCommit should Applications not using AutoCommit should explicitly call commit or rollback before calling explicitly call commit or rollback before calling disconnect. disconnect.

Page 40: Perl DBI

Using NULL valuesUsing NULL values

Undefined values, or undef, are used to indicate NULL Undefined values, or undef, are used to indicate NULL values. values.

You can insert and update columns with a NULL value as You can insert and update columns with a NULL value as

you would a non-NULL value. These examples insert you would a non-NULL value. These examples insert and update the column age with a NULL value:and update the column age with a NULL value:

$sth = $dbh->prepare( qq{ INSERT INTO TEST_TABLE $sth = $dbh->prepare( qq{ INSERT INTO TEST_TABLE

(FIRST_NAME, AGE) VALUES (?, ?) }); (FIRST_NAME, AGE) VALUES (?, ?) }); $sth->execute ("Joe", undef); $sth->execute ("Joe", undef);

Page 41: Perl DBI

Some other DBI functionsSome other DBI functions

@ary = DBI->available_drivers; @ary = DBI->available_drivers; @ary = DBI->available_drivers ($quiet);@ary = DBI->available_drivers ($quiet); Returns a list of all available drivers by Returns a list of all available drivers by

searching for DBD::* modules through the searching for DBD::* modules through the directories in @INC. By default, a warning is directories in @INC. By default, a warning is given if some drivers are hidden by others of the given if some drivers are hidden by others of the same name in earlier directories. Passing a true same name in earlier directories. Passing a true value for $quiet will inhibit the warning. value for $quiet will inhibit the warning.

Page 42: Perl DBI

installed_driversinstalled_drivers

%drivers = DBI->installed_drivers(); %drivers = DBI->installed_drivers(); Returns a list of driver name and driver Returns a list of driver name and driver

handle pairs for all drivers 'installed' handle pairs for all drivers 'installed' (loaded) into the current process. (loaded) into the current process.

The driver name does not include the The driver name does not include the 'DBD::' prefix.'DBD::' prefix.

Page 43: Perl DBI

data_sourcesdata_sources

@ary = DBI->data_sources ($driver); @ary = DBI->data_sources ($driver); Returns a list of data sources (databases) Returns a list of data sources (databases)

available via the named driver. available via the named driver. If $driver is empty or undef, then the value If $driver is empty or undef, then the value

of the DBI_DRIVER environment variable of the DBI_DRIVER environment variable is usedis used

Page 44: Perl DBI

Methods Common to all HandlesMethods Common to all Handles

errerr $rv = $h->err; $rv = $h->err; or $rv = $DBI:: err or $rv = $DBI:: err Returns the native database engine error Returns the native database engine error

code from the last driver method called. code from the last driver method called. The code is typically an integer but you The code is typically an integer but you should not assume that. This is equivalent should not assume that. This is equivalent to $DBI:: err or $h->err.to $DBI:: err or $h->err.

Page 45: Perl DBI

errstrerrstr

$str = $h->errstr;$str = $h->errstr; or $str = $DBI::errstr or $str = $DBI::errstr or $str = $h->errstr or $str = $h->errstr

Returns the native database engine error Returns the native database engine error message from the last DBI method called. This message from the last DBI method called. This has the same lifespan issues as the "err" has the same lifespan issues as the "err" method described above. This is equivalent to method described above. This is equivalent to $DBI::errstr or $h->errstr.$DBI::errstr or $h->errstr.

Page 46: Perl DBI

rowsrows

$rv = $h->rows; $rv = $h->rows; or $rv = $DBI:: rows or $rv = $DBI:: rows

This returns the number of rows effected This returns the number of rows effected by previous SQL statement and equivalent by previous SQL statement and equivalent to $DBI:: rows.to $DBI:: rows.

Page 47: Perl DBI

tracetrace

$h->trace( $ trace_settings); $h->trace( $ trace_settings); DBI sports an extremely useful ability to generate runtime DBI sports an extremely useful ability to generate runtime

tracing information of what it's doing, which can be a tracing information of what it's doing, which can be a huge time-saver when trying to track down strange huge time-saver when trying to track down strange problems in your DBI programs. problems in your DBI programs.

You can use different values to set trace level. These You can use different values to set trace level. These values varies from 0 to 4. The value 0 means disable values varies from 0 to 4. The value 0 means disable trace and 4 means generate complete trace.trace and 4 means generate complete trace.

Page 48: Perl DBI

THANKS….THANKS….