@etla
use strict;
use DBI;
use Term::ReadKey;
use constant READMODE_REVERT => 0; use constant READMODE_NORMAL => 1; use constant READMODE_NOECHO => 2; use constant READMODE_CBREAK => 3; use constant READMODE_RAW => 4; use constant READMODE_RAW_LF => 5;
use constant CREATE_OR_REPLACE_LIBRARY =>
q[CREATE or REPLACE LIBRARY %s AS '%s'];
sub get_param ($;$);
MAIN:
{
my $dsn = get_param("dsn: [host=localhost;sid=$ENV{ORACLE_SID}]")
|| q[host=localhost;sid=$ENV{ORACLE_SID}];
my $user = get_param("database user [sys]: ", READMODE_NORMAL)
|| q[sys];
my $pass = get_param("database password: ", READMODE_NOECHO)
|| '';
my $dbh = DBI->connect(join(':', dbi => Oracle => $dsn), $user, $pass)
|| die("connect(dbi:Oracle:$dsn) failed: $DBI::errstr\n");
foreach my $lib (@ARGV)
{
if(-f($lib) && ($lib =~ m|(.*)/(\w+)(_\d+).so$|))
{
my $dir = $1;
my $name = join('',$2,'.so');
$name =~ s/\W/_/g;
my $sql = sprintf(CREATE_OR_REPLACE_LIBRARY, $name, $lib);
$dbh->do($sql) ?
warn($sql, " : SUCCESS\n"):
warn($sql, " : ",$dbh->errstr(),"\n");
}
else
{
warn("$lib: error - ", ($! || "looks weird to me"), "\n");
}
}
$dbh->disconnect();
}
sub get_param ($;$)
{
my $lf;
my $param;
my ($prompt,$mode) = @_;
length($mode) || ($mode = READMODE_NORMAL);
Term::ReadKey::ReadMode($mode, *STDIN);
print(STDERR $prompt);
chomp($param = readline(*STDIN));
if($mode == READMODE_NOECHO){ print(STDERR $/) }
Term::ReadKey::ReadMode(READMODE_REVERT, *STDIN);
return $param;
}
|