Skip to content
amutake edited this page Oct 9, 2013 · 3 revisions

http://otndnld.oracle.co.jp/tech/linux_win/pdf/ODBC%20for%20Linux.pdf を参考に。 http://docs.oracle.com/cd/E49329_01/readmes.121/b71333/ODBC_IC_Readme_Unix.htm も。

unixODBC

% sudo apt-get install unixodbc-dev unixodbc-bin unixodbc

もしくは、 http://www.unixodbc.org/ の Download からソースコードを落としてくる

% tar xzf unixODBC-2.3.1.tar.gz
% cd unixODBC-2.3.1
% ./configure
% make
% sudo make install

instantclient

http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

からいろいろ落としてくる。

basic, sdk(devel), odbc が必要

DSN

export ORACLE_HOME=/usr/lib/oracle/12.1/client64

mv instantclient_12_1 $ORACLE_HOME

cd $ORACLE_HOME/instantclient_12_1 && ./odbc_update_ini.sh {odbcinist.ini があるディレクトリの親のディレクトリ} をすると、 Driver の場所とかを、 odbcinst.ini~/.odbc.ini に自動で書き込んでくれる。

.odbc.ini の ServerName に、 net service name を書き加える。

net service name は、 show parameter service_name で調べられる。

tnsnames.ora

{net_service_name} =
  (DESCRIPTION =
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = {host})(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = {net_service_name})
      (SID = {sid})
    )
  )

connect :: IO Connection

import Database.HDBC.ODBC (Connection, connectODBC)

connect :: String -- ^ DSN
        -> String -- ^ username
        -> String -- ^ password
        -> IO Connection
connect dsn uid pwd = connectODBC $ concat
    [ "DSN=", dsn, ";"
    , "UID=", uid, ";"
    , "PWD=", pwd
    ]
Clone this wiki locally