[Haskell-cafe] Access to Oracle database from Haskell

Henning Thielemann lemming at henning-thielemann.de
Wed Jun 25 04:59:38 EDT 2008


On Tue, 24 Jun 2008, Alistair Bayley wrote:

>>> 2008/6/24 Henning Thielemann <lemming at henning-thielemann.de>:
>>>>
>>> When you run configure, you should get output that says:
>>> Using Oracle: <path>
>>>
>>> What is <path>?
>>
>> I don't get these questions.
>
> Sorry. I was really asking (not very clearly): what is the output from
> "runhaskell Setup.hs configure -foracle" ?

It doesn't output the Oracle path. :-(

>> Ah, I must have set ORACLE_HOME for the Takusen installation ... should be
>> documented. However in my case, this doesn't change the path used by
>> Takusen's Setup/install.
>
> Well, you don't actually need it set for the Takusen install (it
> doesn''t use it). But $ORACLE_HOME/bin should be in your path. And it
> needs to contain the executable sqlplus. Can you run sqlplus?

Yes, I have successfully connected to a database with sqlplus, already.

> If sqlplus is not in my path then I get this error in the configure
> step, because I have specified sqlplus as a buildtool in
> Takusen.cabal:
>
>  > setup configure -foracle
>  Configuring Takusen-0.8.2...
>  setup: sqlplus is required but it could not be found.
>
> Note: sqlplus isn't really needed to build; this is just a validation
> step, to check you have $ORACLE_HOME/bin in your path.

I don't get an error. sqlplus is in $ORACLE_HOME/bin, but the RPM package 
also sets a link from /usr/bin/sqlplus to $ORACLE_HOME/bin, thus 'sqlplus' 
is in the $PATH also without $ORACLE_HOME. (But sqlplus cannot be started 
until the LD_LIBRARY_PATH is extended to Oracles libraries.)


>> $ echo $ORACLE_HOME
>> /usr/lib/oracle/10.2.0.4/client
>> $ ls $ORACLE_HOME
>> bin  lib
>> $ ll $ORACLE_HOME/lib
>> ...
>> I assume that libociei.so is the library I need.
>
> Actually it's libclntsh.so. You need to change the oracle section in
> Takusen.cabal to this:
>
>  If flag(oracle)
>    Exposed-modules:
>        Database.Oracle.Enumerator
>      , Database.Oracle.OCIConstants
>      , Database.Oracle.OCIFunctions
>    Build-Tools: sqlplus
>    If os(windows)
>      Extra-Libraries: oci
>    Else
>      Extra-Libraries: clntsh
>
> Your $ORACLE_HOME installation looks fairly normal, if somewhat
> minimal. I would normally expect to see sqlplus, and maybe some other
> executables, like tnsping. And a folder $ORACLE_HOME/oci/include,
> which contains the OCI header files.

They got installed to:
   /usr/include/oracle/10.2.0.4/client/
  That is, they are not in $ORACLE_HOME. :-(

>> $ runhaskell Setup.hs configure --user -f oracle
>> Configuring Takusen-0.8.2...
>
> Here, I would expect to see "Using Oracle: /usr/lib/oracle/10.2.0.4/client"

It does not tell me. :-(

> After setup configure you can say:
>  $ runhaskell Setup.hs register --gen-pkg-config
>
> and then take a look at the generated Takusen-0.8.2.conf. Check the
> library-dirs and include-dirs fields.

Takusen-0.8.2.conf and dist/installed-pkg-config contain the same.
They contain

include-dirs: /usr/oci

independent from my setting of ORACLE_HOME. As I said, I cannot manually 
fix dist/installed-pkg-config, because it gets overwritten by 'Setup 
install'.


More information about the Haskell-Cafe mailing list