ORA-01406 from a perl script using DBI package



Hi,

Can anyone help me resolve this problem?

I am trying to print DDL statements using the DBI package in a perl script.


I am getting this error:

DBConnect Successful: dbi:Oracle:DBINST
DBD::Oracle::st fetchrow_arrayref failed: ORA-01406: fetched column value was truncated (DBD: ORA-01406 error on field 1 of 1, ora_type 112) at test4.pl line 32.

All the references I checked for this type of error adviced to include the following stmts, which I did:

$dbh->{LongReadLen} = 9000000; <= to increase the buffer size
$dbh->{LongTrun***} = 0; <= to ignore error and truncate output if buffer is still not large enough

However I still get the same error, with or without the above settings.

1) Any idea on how to change the script to fix issue?
2) Is there a way to change the format for the output created by dbms_metadata.get_ddl to resemble out some other commercial database tools?

Regards

Ray




The full perl scipt is listed below.


use strict;
use DBI;
use File::Path <File::Path> ;


my $connection = "dbi:Oracle:DBINST";
my $user = "SCHEMA_NAME";
my $password = "***************";
my $dbh;

$dbh = DBI->connect($connection, $user, $password, { RaiseError => 1, AutoCommit => 0 });

if (defined $dbh) {
print " DBConnect Successful: $connection\n";
}
else {
print " DBConnect Failure: $connection : $!\n";
exit;
}

$dbh->{LongReadLen} = 9000000;
$dbh->{LongTrun***} = 0;

my $sql_stmt = "select dbms_metadata.get_ddl('PACKAGE','PKG_ETL','$user') from dual";
my $sth = $dbh->prepare( $sql_stmt );
$sth->execute;
my $ddl_stmt;
while( ( $ddl_stmt ) = $sth->fetchrow_arrayref ) {
print S"$ddl_stmt\n";
}
$sth->finish();


exit;




==============================================================================
Please access the attached hyperlink for an important electronic communications disclaimer:

http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
==============================================================================

Quantcast