Using perl/php with DB2, unixODBC and AS400: Difference between revisions

From Skytech
Jump to navigation Jump to search
Line 20: Line 20:
<pre>
<pre>
## 32 bit
## 32 bit
rpm -ivh iSeriesAccess-5.4.0-1.6.i386.rpm
yum --nogpgcheck install iSeriesAccess-5.4.0-1.6.i386.rpm


## 64 bit (only ODBC - no terminal - only supported on 32bit)
## 64 bit (only ODBC - no terminal - only supported on 32bit)
rpm -ivh iSeriesAccess-5.4.0-1.6.x86_64.rpm
yum --nogpgcheck install iSeriesAccess-5.4.0-1.6.x86_64.rpm
</pre>
</pre>


'''32bit only'''
If it fails regarding dependencies I had to download openmotif and install manually (yum crashed when trying to install the one in repo)
If it fails regarding dependencies I had to download openmotif and install manually (yum crashed when trying to install the one in repo). This is because of the terminal emulator which is absent in the 64bit version.
<pre>
<pre>
## 64bit
wget ftp://ftp.sunet.se/pub/os/Linux/distributions/centos/5.3/os/x86_64/CentOS/openmotif22-2.2.3-18.x86_64.rpm
## 32bit
## 32bit
wget ftp://ftp.sunet.se/pub/os/Linux/distributions/centos/5.3/os/x386/CentOS/openmotif22-2.2.3-18.i386.rpm
wget ftp://ftp.sunet.se/pub/os/Linux/distributions/centos/5.3/os/x386/CentOS/openmotif22-2.2.3-18.i386.rpm


## Install
## Install
yum install openmotif22-2.2.3-18.x86_64.rpm
yum install openmotif22-2.2.3-18.i386.rpm
</pre>
</pre>



Revision as of 08:43, 26 June 2009


Install prereq software (Centos 5.3)

We need a bit of software installed to get up and running. Grab:

yum install unixODBC unixODBC-devel

iSeries Access for linux

This package contains the basics for connecting to an AS/400 via an 5250 emulator + unixODBC drivers and sql utils.


We need this to create/use our unixODBC. This is under IBM license, but otherwise a free download. You do need to register on their site tho. Grab from here:

http://www-03.ibm.com/systems/i/software/access/linux/

Install it:

## 32 bit
yum --nogpgcheck install iSeriesAccess-5.4.0-1.6.i386.rpm

## 64 bit (only ODBC - no terminal - only supported on 32bit)
yum --nogpgcheck install iSeriesAccess-5.4.0-1.6.x86_64.rpm

32bit only If it fails regarding dependencies I had to download openmotif and install manually (yum crashed when trying to install the one in repo). This is because of the terminal emulator which is absent in the 64bit version.

## 32bit
wget ftp://ftp.sunet.se/pub/os/Linux/distributions/centos/5.3/os/x386/CentOS/openmotif22-2.2.3-18.i386.rpm

## Install
yum install openmotif22-2.2.3-18.i386.rpm

ODBC Setup

Setup ODBC to reflect your DB-settings on the AS/400 run #odbcinst -j to see where your install files are located


This is my setup

[AS400]
Description             = iSeries Access ODBC Driver
Driver                  = iSeries Access ODBC Driver
System                  = 10.0.0.1
UserID                  =
Password                =
Naming                  = 0
DefaultLibraries        = QIWS
Database                =
ConnectionType          = 0
CommitMode              = 2
ExtendedDynamic         = 1
DefaultPkgLibrary       = QGPL
DefaultPackage          = A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression    = 1
LibraryView             = 0
AllowUnsupportedChar    = 0
ForceTranslation        = 0
Trace                   = 0

Note

  • [AS400] is the DSN (without the []) used when making ODBC connections

DefaultLibraries = QIWS is a test db which AS400 has. Use this to test connections/queries. Change back to QGPL when ready for live work.


Perl

If you want perl to connect via ODBC you need to install the DBD::ODBC module from CPAN.

## need perl-DBI if not installed already
yum install perl-DBI 
cpan 'DBD::ODBC'

This has unixODBC-devel as requirement, so if it fails, make sure you have that installed as well. Then try again.

Sample perl code to connect and retrive some data

#!/usr/bin/perl
use strict;
use DBI;
my $dbh = DBI->connect('dbi:ODBC:AS400', '<username>', '<password>');

&getTestData();
sub getTestData
{
        my $sSQL = "SELECT COUNT(*) FROM QIWS.QCUSTCDT";
        my $iCount = $dbh->selectrow_array($sSQL);
        print "Count :: $iCount\n";
}
$dbh->disconnect if ($dbh);