Hatena::ブログ(Diary)

tabizouの日記

2018-06-13

Ubuntu 16.04 LTS + Perl で Linux版 SQL Server 2017 Express にアクセスしてみる

14:36

Ubuntu 16.04 LTS + PerlLinuxSQL Server 2017 Express にアクセスしてみる

 

LinuxSQL Server 2017 Express をインストールしたので ODBCでアクセスしてみる

Ubuntu 16.04 LTS + Perl + DBI::DBD + unixODBC <-> SQL Server 2017 Express

になるのかな?

※こういう検証用だとやはりPerlが楽だよなぁ・・・

 

環境はこちら

Ubuntu 16.04 LTS で SQL Server 2017 Express を試してみる

Ubuntu 16.04 LTS で SQL Server 2017 Express をもう少し試してみる

Ubuntu 17.10 + VsCode + Perl で Windows10 + SQL Server 2017 Express にアクセスする

 

参考にしたのは以下のサイト

perlモジュールのinstallにcpanmを使う

 

# perl -v

This is perl 5, version 22, subversion 1 (v5.22.1) built for x86_64-linux-gnu-thread-multi

(with 68 registered patches, see perl -V for more detail)

 

DBI::DBDのインストール

コンソールより、以下を実行する

# apt-get install perl-doc

# apt install cpanminus

# cpanm install DBD::ODBC (DBIはここでインストールされる)

# cpanm install DDP

 

・unixodbcは以下でツール系でまとめてインストールしている

Ubuntu 16.04 LTS で SQL Server 2017 Express を試してみる

 

・/etc/odbc.ini の設定

# for remote windows

[MSSQLWin10]

Driver = /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1

Server = tcp:xxx.xxx.xxx.xxx\SQLEXPRESS,1433

Database = DEMO

ClientCharset = UTF-8

# for local ubuntu

[MSSQLLocal]

Driver = /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1

Server = tcp:xxx.xxx.xxx.xxx,1433

Database = DEMO

ClientCharset = UTF-8

 

# odbcinst -i -d -f /etc/odbc.ini でインストールする

 

登録済の設定を表示する

# odbcinst -q -d

[ODBC Driver 17 for SQL Server]

[MSSQLWin10]

[MSSQLLocal]

 

指定した設定を削除する

# odbcinst -u -d -n MSSQLLocal

# odbcinst -u -d -n MSSQLWin10

 

サンプル(使いまわし)

use strict;
use utf8;
use DBI;

my $dbh=DBI->connect('dbi:ODBC:MSSQLLocal','demo','demo') or die $!;
my $sth=$dbh->prepare("select * from ZIPCODE") or die $dbh->errstr;

# 出力エラー対策
$sth->{LongTruncOk}=1;
$sth->{LongReadLen}=2000000;

$sth->execute or die $dbh->errstr;

while(my $arrayref = $sth->fetchrow_arrayref){
        use DDP;
        p $arrayref;
}

$sth->finish;
$dbh->disconnect;

perl samp0001.pl
\ [
    [0]  "00000001",
    [1]  "01101",
    [2]  "060",
    [3]  "0600000 ",
    [4]  "ホッカイド鐔\0",
    [5]  "サッポロシチュウオウク    \0",
    [6]  "イカニケイサイガナイバアイ                                   \0",
    [7]  "北海道           \0",
    [8]  "札幌市中央区                      \0",
    [9]  "以下に掲載がない場合                                                  \0",
    [10] 0,
    [11] 0,
    [12] 0,
    [13] 0,
    [14] 0,
    [15] 0
]
〜