#!/usr/local/bin/perl # ---------------------------------------------------------------------------- # PERL script for windows box that given a oracle home name will output a set # path statement putting the oracle home bin directory at the front of the # path statement. Also will output a set oracle_home statement to set oracle # home directory that it retrieves from the registery. This is useful when # outputing it to a batch file eg orasel.pl oracle_home name > temp.bat then # calling temp.bat to set the path and oracle home dynamically. # # Bryan Rountree # bryan.rountree@indus.com # ---------------------------------------------------------------------------- use Win32::Registry; usage() if $#ARGV == -1; my $Reg = "SOFTWARE\\Oracle\\ALL_HOMES"; my ($hakey, @key_list, $key); $HKEY_LOCAL_MACHINE->Open($Reg,$hakey)|| die $!; $hakey ->GetKeys(\@key_list); $hakey->Close(); foreach $key (@key_list) { #print "$key\n"; &getpath("$Reg\\$key"); setpath() if $found eq "TRUE"; } notfound() if $found eq "FALSE"; sub notfound { print "Sorry Oracle Home not found\n"; } sub setpath { $_ = $ENV{'PATH'}; $newpath = $orapath."\\bin;"; my @items = split /;/; $foundinpath = "FALSE"; for ($i = 0; $i <= $#items; $i++) { if (uc($items[$i]) ne uc($orapath."\\bin")) { if ($i < $#items) {$newpath = $newpath.$items[$i].";";}; } if (uc($items[$i]) eq uc($orapath."\\bin")) { $foundinpath = "TRUE"; } } if ($foundinpath eq "TRUE") {$newpath=$newpath.$items[$#items];}; #$ENV{'Path'} = $newpath; print "set PATH=$newpath\n"; print "set ORACLE_HOME=$orapath"; exit ( 0 ); } sub getpath { use Win32::Registry; my %RegType = ( 0 => 'REG_0', 1 => 'REG_SZ', 2 => 'REG_EXPAND_SZ', 3 => 'REG_BINARY', 4 => 'REG_DWORD', 5 => 'REG_DWORD_BIG_ENDIAN', 6 => 'REG_LINK', 7 => 'REG_MULTI_SZ', 8 => 'REG_RESOURCE_LIST', 9 => 'REG_FULL_RESOURCE_DESCRIPTION', 10 => 'REG_RESSOURCE_REQUIREMENT_MAP'); my $Register = $_[0]; my $RegType, $RegValue, $RegKey, $value; my %values; $HKEY_LOCAL_MACHINE->Open($Register,$hkey)|| die $!; $hkey->GetValues(\%values); $found = "FALSE"; foreach $value (keys(%values)) { $RegType = $values{$value}->[1]; $RegValue = $values{$value}->[2]; $RegKey = $values{$value}->[0]; next if ($RegType eq ''); #do not print default value if not assigned $RegKey = 'Default' if ($RegKey eq ''); #name the default key if (uc($RegKey) eq uc("NAME")) { if (uc($RegValue) eq uc($ARGV[0])) {$found = "TRUE";}; } if ($RegKey eq "PATH" and $found eq "TRUE") { $orapath = $RegValue; #print uc("$RegValue\n"); }; } $hkey->Close(); } sub usage { print STDERR <