BillB has asked for the wisdom of the Perl Monks concerning the following question:

I installed the Perl build from active state on my 64 bit windows 7 machine. However I have to be able to connect to an Oracle 8I database using a 10g client. The 10g client can connect to the database with no problems, but when I try to use DBI it says that that version is no longer supported. I looked up the newest version that will support my database and it is version 1.20 I was able to download the 1.20 version for DBD::Oracle from CPAN but following the instructions I can't get it to replace the version used by my 64 bit version of Perl. Does anyone know how to do this. It is very frustrating. By the way version 1.20 will talk to all versions of the database, it just doesn't support the newest bells and whistles.

Replies are listed 'Best First'.
Re: HOW CAN i DOWNGRADE DBD::Oracle
by thanos1983 (Parson) on Jan 18, 2018 at 08:47 UTC

    Hello BillB,

    Welcome to the Monastery. I am reading your question and I am getting confused, what module has version 1.20? You are referring to DBI or DBD::Oracle? None of these modules latest version is 1.20, can you provide us a bit more information. Where your code is failing, sample of code and error?

    To answer your question on how to downgrade a module. Maybe there are different ways but I would remove the module and install the version that I desire. How to remove the module? Simply use another module to that for you, for example App::cpanminus sample of command: cpanm --uninstall DBD::Oracle. But to be honest usually the solution is to upgrade to a latest version not to downgrade version.

    Having said that I would recommend to updade your cpan, simply by doing this: install CPAN and after reload cpan the upper and lower case of the characters is important.

    As a last step I would upgrade all the modules to the latest version. There are several ways to do it, I usually do it like: cpan[1]> upgrade. Sample of alternative solution from the forum safe way to upgrade module.

    Hope this helps, BR.

    Seeking for Perl wisdom...on the process of learning...not there...yet!
      DBD::Oracle is the oracle interface for the DBI module. The reason tha +t I need to get 1.20 into my perl deployment follows from CPAN. I ha +ve oracle 8iR3 From version 1.25 onwards DBD::Oracle only support Oracle clients 9.2 +or greater. Support for ProC connections was dropped in 1.29. If you are still stuck with an older version of Oracle or its client y +ou might want to look at the table below. +---------------------+--------------------------------------------- +--------+ | | Oracle Version + | +---------------------+----+-------------+---------+------+--------+ +--------+ | DBD::Oracle Version | <8 | 8.0.3~8.0.6 | 8iR1~R2 | 8iR3 | 9i | + 9.2~11 | +---------------------+----+-------------+---------+------+--------+ +--------+ | 0.1~16 | Y | Y | Y | Y | Y | + Y | +---------------------+----+-------------+---------+------+--------+ +--------+ | 1.17 | Y | Y | Y | Y | Y | + Y | +---------------------+----+-------------+---------+------+--------+ +--------+ | 1.18 | N | N | N | Y | Y | + Y | +---------------------+----+-------------+---------+------+--------+ +--------+ | 1.19 | N | N | N | Y | Y | + Y | +---------------------+----+-------------+---------+------+--------+ +--------+ | 1.20 | N | N | N | Y | Y | + Y | +---------------------+----+-------------+---------+------+--------+ +--------+ | 1.21~1.24 | N | N | N | N | Y | + Y | +---------------------+----+-------------+---------+------+--------+ +--------+ | 1.25+ | N | N | N | N | N | + Y | +---------------------+----+-------------+---------+------+--------+ +--------+ As there are dozens of different versions of Oracle's clients this lis +t does not include all of them, just the major released versions of O +racle. My @INC is @INC: C:/Perl64/site/lib C:/Perl64/lib . I installed cpanm, but when I tried the uninstall it returned the foll +owing C:\sql> cpanm --uninstall DBD::Oracle ! DBD::Oracle is not found in the following directories and can't be u +ninstalled . C:\Perl64\site\lib C:\Perl64\site\lib When I ran the perl Makefile.PL and then dmake in the downloaded I get + the following C:\temp5\DBD-Oracle-1.20>perl Makefile.PL Multiple copies of Driver.xst found in: C:/Perl64/site/lib/auto/DBI/ C +:/Perl64/l ib/auto/DBI/ at Makefile.PL line 35. Using DBI 1.639 (for perl 5.024003 on MSWin32-x64-multi-thread) instal +led in C:/ Perl64/site/lib/auto/DBI/ Configuring DBD::Oracle for perl 5.024003 on MSWin32 (MSWin32-x64-mult +i-thread) Remember to actually *READ* the README file! Especially if you have an +y problems . Using Oracle in C:/app/Oracle12c/product/12.2.0/dbhome_1 DEFINE _SQLPLUS_RELEASE = "1202000100" (CHAR) Oracle version 12.2.0.1 (12.2) Found oci directory Using OCI directory 'oci' Checking for functioning wait.ph System: perl5.024003 Compiler: C:\Perl64\site\bin\gcc.exe -s -O2 -s -O2 -DWIN32 -DWIN64 +-DCONSERVA TIVE -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTE +XT -DPERL_ IMPLICIT_SYS -fwrapv -fno-strict-aliasing -mms-bitfields Linker: not found Sysliblist: Checking if your kit is complete... Looks good Warning (mostly harmless): No library found for -lmoldname Warning (mostly harmless): No library found for -lkernel32 Warning (mostly harmless): No library found for -luser32 Warning (mostly harmless): No library found for -lgdi32 Warning (mostly harmless): No library found for -lwinspool Warning (mostly harmless): No library found for -lcomdlg32 Warning (mostly harmless): No library found for -ladvapi32 Warning (mostly harmless): No library found for -lshell32 Warning (mostly harmless): No library found for -lole32 Warning (mostly harmless): No library found for -loleaut32 Warning (mostly harmless): No library found for -lnetapi32 Warning (mostly harmless): No library found for -luuid Warning (mostly harmless): No library found for -lws2_32 Warning (mostly harmless): No library found for -lmpr Warning (mostly harmless): No library found for -lwinmm Warning (mostly harmless): No library found for -lversion Warning (mostly harmless): No library found for -lodbc32 Warning (mostly harmless): No library found for -lodbccp32 Warning (mostly harmless): No library found for -lcomctl32 LD_RUN_PATH=C:/app/Oracle12c/product/12.2.0/dbhome_1/lib:C:/app/Oracle +12c/produc t/12.2.0/dbhome_1/rdbms/lib Using DBD::Oracle 1.20. Using DBD::Oracle 1.20. Multiple copies of Driver.xst found in: C:/Perl64/site/lib/auto/DBI/ C +:/Perl64/l ib/auto/DBI/ at Makefile.PL line 1657. Using DBI 1.639 (for perl 5.024003 on MSWin32-x64-multi-thread) instal +led in C:/ Perl64/site/lib/auto/DBI/ Generating a dmake-style Makefile Writing Makefile for DBD::Oracle Writing MYMETA.yml and MYMETA.json *** If you have problems... read all the log printed above, and the README and README.help.tx +t files. (Of course, you have read README by now anyway, haven't you?) C:\temp5\DBD-Oracle-1.20>dmake cp lib/DBD/Oracle/GetInfo.pm blib\lib\DBD\Oracle\GetInfo.pm cp oraperl.ph blib\lib/oraperl.ph cp ocitrace.h blib\arch\auto\DBD\Oracle/ocitrace.h cp Oracle.h blib\arch\auto\DBD\Oracle/Oracle.h cp Oraperl.pm blib\lib/Oraperl.pm cp mk.pm blib\arch\auto\DBD\Oracle/mk.pm cp mkta.pl blib\lib\DBD\mkta.pl cp dbdimp.h blib\arch\auto\DBD\Oracle/dbdimp.h cp Oracle.pm blib\lib\DBD\Oracle.pm Running Mkbootstrap for Oracle () "C:\Perl64\bin\perl.exe" -MExtUtils::Command -e chmod -- 644 "Oracle.b +s" "C:\Perl64\bin\perl.exe" -MExtUtils::Command::MM -e cp_nonempty -- Ora +cle.bs bli b\arch\auto\DBD\Oracle\Oracle.bs 644 "C:\Perl64\bin\perl.exe" -p -e "s/~DRIVER~/Oracle/g" C:\Perl64\site\li +b\auto\DBI \Driver.xst > Oracle.xsi "C:\Perl64\bin\perl.exe" "C:\Perl64\lib\ExtUtils\xsubpp" -typemap C:\ +Perl64\lib \ExtUtils\typemap -typemap C:\temp5\DBD-Oracle-1.20\typemap Oracle.xs + > Oracle. xsc "C:\Perl64\bin\perl.exe" -MExtUtils::Command -e mv -- Oracle.xsc Oracl +e.c C:\Perl64\site\bin\gcc.exe -c -IC:/app/Oracle12c/product/12.2.0/dbhom +e_1/oci/in clude -IC:/app/Oracle12c/product/12.2.0/dbhome_1/rdbms/demo -IC:\Perl6 +4\site\lib \auto\DBI -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -DPERL_TEXTMODE_ +SCRIPTS -D USE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fwrapv +-fno-stric t-aliasing -mms-bitfields -s -O2 -DVERSION=\"1.20\" -DXS_V +ERSION=\"1 .20\" "-IC:\Perl64\lib\CORE" -Wall -Wno-comment -DUTF8_SUPPORT -DNEW +_OCI_INIT -DORA_OCI_VERSION=\"12.2.0.1\" Oracle.c Oracle.c: In function 'XS_DBD__Oracle__st_ora_execute_array': Oracle.c:1535:14: error: 'sv_undef' undeclared (first use in this func +tion) Oracle.c:1535:14: note: each undeclared identifier is reported only on +ce for eac h function it appears in Oracle.xs: In function 'XS_DBD__Oracle__st_cancel': Oracle.xs:154:44: error: 'sv_yes' undeclared (first use in this functi +on) Oracle.xs:154:54: error: 'sv_no' undeclared (first use in this functio +n) Oracle.xs: In function 'XS_DBD__Oracle__db_reauthenticate': Oracle.xs:166:62: error: 'sv_yes' undeclared (first use in this functi +on) Oracle.xs:166:72: error: 'sv_no' undeclared (first use in this functio +n) Oracle.xs: In function 'XS_DBD__Oracle__db_ora_lob_write': Oracle.xs:194:11: error: 'sv_undef' undeclared (first use in this func +tion) Oracle.xs:219:11: error: 'sv_yes' undeclared (first use in this functi +on) Oracle.xs: In function 'XS_DBD__Oracle__db_ora_lob_append': Oracle.xs:250:11: error: 'sv_undef' undeclared (first use in this func +tion) Oracle.xs:274:17: error: 'sv_yes' undeclared (first use in this functi +on) Oracle.xs: In function 'XS_DBD__Oracle__db_ora_lob_read': Oracle.xs:330:13: error: 'sv_undef' undeclared (first use in this func +tion) Oracle.xs: In function 'XS_DBD__Oracle__db_ora_lob_trim': Oracle.xs:362:11: error: 'sv_undef' undeclared (first use in this func +tion) Oracle.xs:365:11: error: 'sv_yes' undeclared (first use in this functi +on) Oracle.xs: In function 'XS_DBD__Oracle__db_ora_lob_length': Oracle.xs:380:11: error: 'sv_undef' undeclared (first use in this func +tion) dmake.exe: Error code 129, while making 'Oracle.o' C:\temp5\DBD-Oracle-1.20>
        Oracle.c:1535:14: error: 'sv_undef' undeclared (first use in this function

        I think this happens because 'sv_undef' has been removed from the API and replaced with &PL_sv_undef.
        Same goes for 'sv_yes' (now '&PL_sv_yes') and 'sv_no' (now '&PL_sv_no').

        I think (untested) you'll get around that problem by prepending (in Oracle.xs) all sv_undef/sv_yes/sv_no occurrences with '&PL_'.

        Cheers,
        Rob
Re: HOW CAN i DOWNGRADE DBD::Oracle
by marto (Cardinal) on Jan 17, 2018 at 22:24 UTC
Re: HOW CAN i DOWNGRADE DBD::Oracle
by Anonymous Monk on Jan 18, 2018 at 15:34 UTC
    Is this not similar to the procedure for "using Perl with shared hosting?" In other words, set up your own CPAN repository and specify it first in PERL5LIB so that it will be picked-up in preference to any system-wide packages. You should be able to install what the application requires, there.
      I will search on the topic "using Perl with shared hosting" and see if it is what I need to do. Thanks