157
SymfowareServer Perlドライバユーザーズガイド

Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

SymfowareⓇ Server Perlドライバユーザーズガイド

Page 2: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

まえがき

i

まえがき

本書の目的 本書は、PerlからSymfoware/RDBをアクセスするための機構であるDBI(DataBase Interface)・Database Driver for Symfoware(以降、DBD::Symfowareと呼びます)のユーザーズガイドです。

本書の読者 本書は、PerlからSymfoware/RDBのデータベースをアクセスする方に読んでいただくように書かれています。 本書を読むには、以下に示す知識が必要です。 ● Symfoware/RDBの機能およびデータベースの概要 ● SQL文に関する知識 ● Perlに関する基本的な知識

本書の構成

第1章 Perl DBI・DBD::Symfowareの概要 Perl、DBI、DBD::Symfowareの概要について説明しています。

第2章 Perl DBI・DBD::Symfowareの導入 Perl、DBI、DBD::Symfowareの導入方法について説明しています。

第3章 Perl DBI・DBD::Symfowareの使用 PerlからSymfoware/RDBのデータベースをアクセスする方法について説明しています。

第4章 Perl DBI・DBD::Symfowareの仕様 DBI・DBD::Symfowareを用いてSymfoware/RDBのデータベースをアクセスするときの仕様について説明しています。

第5章 RDBコマンドの呼び出し Perlのコマンド呼び出し機能を用いてRDBコマンドを呼び出す方法について説明しています。

第6章 注意事項 PerlからSymfoware/RDBのデータベースをアクセスするときの注意事項について説明しています。

付録A connect、connect_cachedのパラメタの記述形式 connect、connect_cachedで指定するパラメタの記述形式について説明しています。

付録B DBD::Symfowareの修正履歴 DBD::Symfowareのソースの修正履歴について説明しています。

Page 3: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

まえがき

ii

付録C DBD::Symfowareのソース構成 DBD::Symfowareのソースの構成について説明しています。

用語集 本書で使用する用語の意味を定義しています。

本書の位置づけ Symfoware Serverの関連マニュアルと、本書中での表記について以下に示します。Symfoware Serverのマニュアルは、製品のCD-ROMに添付されています。

本書での表記 マニュアル名 スタートガイド サーバ編 FUJITSU Symfoware Server スタートガイド サー

バ編 RDBユーザーズガイド 応用プログラム開発編

FUJITSU Symfoware Server RDBユーザーズガイド 応用プログラム開発編

RDBユーザーズガイド データベース定義編

FUJITSU Symfoware Server RDBユーザーズガイド データベース定義編

SQLリファレンスガイド FUJITSU Symfoware Server SQLリファレンスガイド

RDB管理者ガイド(注) Symfoware Server RDB管理者ガイド 注) Symfoware Serverの製品のOSとVLにより参照マニュアルが異なります。

Symfoware/RDBが出力するメッセージの処置を参照する

【SolarisおよびLinuxの場合】 Symfoware/RDBが出力するメッセージの意味および利用者の処置は、RDBコマンド(rdbprtmsgコマンド)を利用して参照できます。

【Windows NT/2000/XPの場合】 Windows NT/2000/XPのオンラインヘルプで参照できます。

注意事項 本書の中でマニュアル作成時点でのWebのURL(Uniform Resource Locator)を記載していますが、URLがなくなっている場合があります。 本書の中にマニュアル作成時点での最新のソフトウェアのバージョンを記載していますが、現在ではさらに最新のバージョンが提供されている場合があります。

本書の対応する製品

【Solarisの場合】 ● Perl 5.6.1 ● DBI 1.30 ● DBD::Symfoware 1.00 ● GNUzip 1.2.4 ● GNUgcc 2.95.2

Page 4: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

まえがき

iii

【Linuxの場合】 ● OSに同梱されているPerl(Perl 5.6.1) ● DBI 1.30 ● DBD::Symfoware 1.00 ● Symfoware Server Standard Edition V5.0L10 以降

【Windowsの場合】 ● Active Perl 5.6.1 ● DBI 1.30、または、Active Stateが公開しているDBI ● DBD::Symfoware 1.00 ● Microsoft Visual C++6.0

説明用モデルについて 本書で使用するデータベースは架空のものであり、現実のものとは何の関係もありません。

略称 本書で使用する略称を以下に示します。

略称 正式名称 Windows Microsoft® Windows® 95 operating system、

Microsoft® Windows® 98 operating system、 Microsoft® Windows® 98 Second Edition、 Microsoft® Windows® Millennium Edition、 Microsoft® Windows NT® Server, Enterprise Server Edition、 Microsoft® Windows NT® Server, Terminal Server Edition、 Microsoft® Windows NT® Server network operating system、 Microsoft® Windows NT® Workstation operating system、 Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server operating system、 Microsoft® Windows® 2000 Server operating system、 Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® XP Professional および Microsoft® Windows® XP Home Edition

Windows 95/98/Me/XP Microsoft® Windows® 95 operating system、 Microsoft® Windows® 98 operating system、 Microsoft® Windows® 98 Second Edition、 Microsoft® Windows® Millennium Edition および Microsoft® Windows® XP Home Edition

Windows NT/2000/XP Microsoft® Windows NT® Server, Enterprise Server Edition、 Microsoft® Windows NT® Server, Terminal Server Edition、 Microsoft® Windows NT® Server network operating system、 Microsoft® Windows NT® Workstation operating system、 Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server operating system、 Microsoft® Windows® 2000 Server operating system、 Microsoft® Windows® 2000 Professional operating system および Microsoft® Windows® XP Professional

Windows 95/98 Microsoft® Windows® 95 operating system、

Page 5: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

まえがき

iv

略称 正式名称 Microsoft® Windows® 98 operating system および Microsoft® Windows® 98 Second Edition

Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server operating system、 Microsoft® Windows® 2000 Server operating system、 Microsoft® Windows® 2000 Professional operating system および Microsoft® Windows® XP Professional

Windows Me/XP Microsoft® Windows® Millennium Edition および Microsoft® Windows® XP Home Edition

商標 Perlは、米国のLarry Wallの著作です。 DBIは、アイルランドのTim Bunceの著作です。 GNUgccは、Free Software Foundation, Inc.の著作です。 GNUzipは、Free Software Foundation, Inc.の著作です。 Microsoft 、 Windows 、 Windows 95/98/Me/NT/2000/XP は 、米国 Microsoft Corporationの米国およびそのほかの国での登録商標です。 UNIXは、The Open Groupの米国ならびにほかの国での登録商標です。 Solarisは、米国Sun Microsystems, Inc.の登録商標です。 Linuxは、Linus Torvalds氏の米国およびその他の国における登録商標あるいは商標です。 Symfowareは、富士通株式会社の登録商標です。 そのほか、本書に記載されている会社名および製品名は、それぞれ各社の商標または登録商標です。 なお、本マニュアルでは、®、TM表記を省略しています。 平成14年11月

平成14年11月 初版

告知文 [高度な安全性が要求される用途への使用について] 本製品は、一般事務用、パーソナル用、家庭用、通常の産業等の一般的用途を想定して開発・設計・製造されているものであり、原子力施設における核反応制御、航空機自動飛行制御、航空交通管制、大量輸送システムにおける運行制御、生命維持のための医療用機器、兵器システムにおけるミサイル発射制御など、極めて高度な安全性が要求され、仮に当該安全性が確保されない場合、直接生命・身体に対する重大な危険性を伴う用途(以下「ハイセイフティ用途」という)に使用されるよう開発・設計・製造されたものではありません。 お客さまは本製品を必要な安全性を確保する措置を施すことなくハイセイフティ用途に使用しないでください。また、お客さまがハイセイフティ用途に本製品を使用したことにより発生する、お客様または第三者からのいかなる請求または損害賠償に対しても富士通株式会社およびその関連会社は一切責任を

Page 6: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

まえがき

v

負いかねます。

All Rights Reserved, Copyright© 富士通株式会社 2002

Page 7: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server
Page 8: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

目次

vii

目次

第1章 PHP Symfowareの概要....................................................... 1 1.1 PHPとは................................................................... 2 1.2 PHP Symfowareとは......................................................... 3 第2章 PHP Symfowareの導入....................................................... 5 2.1 SolarisおよびLinuxの場合の導入方法 ........................................ 6 2.1.1 インストール済みパッケージのアンインストール .......................... 6 2.1.2 アーカイバのインストール .............................................. 7 2.1.3 コンパイラのインストール .............................................. 9 2.1.4 Symfowareのインストール.............................................. 10 2.1.5 Apacheのインストール................................................. 11 2.1.6 PHPのビルドで使用するコマンドのインストール .......................... 11 2.1.7 PHPのインストール.................................................... 13 2.1.8 PHP Symfowareのインストール .......................................... 14 2.1.9 Apacheのセットアップ................................................. 18 2.2 Windowsの場合の導入方法.................................................. 21 2.2.1 エディタのインストール ............................................... 21 2.2.2 アーカイバのインストール ............................................. 21 2.2.3 Symfowareのインストール.............................................. 21 2.2.4 Apacheのインストール................................................. 22 2.2.5 PHPのインストール.................................................... 22 2.2.6 PHP Symfowareのインストール .......................................... 23 2.2.7 Apacheのセットアップ................................................. 26

第3章 PHP Symfowareの使用...................................................... 29 3.1 PHPスクリプトの作成および実行 ............................................ 30 3.2 PHP Symfowareの規約...................................................... 32 3.2.1 PHP Symfowareの仕様.................................................. 32 3.2.2 変数の規約........................................................... 32 3.2.3 真、偽............................................................... 32 3.2.4 SQL文の規約.......................................................... 33

第4章 Symfoware関数の仕様...................................................... 35 4.1 Symfoware関数の概要...................................................... 36 4.1.1 Symfoware関数のスクリプト例 .......................................... 36 4.2 Symfoware関数............................................................ 38 4.2.1 symfoware_autocommit ................................................. 38 4.2.2 symfoware_binmode .................................................... 39 4.2.3 symfoware_close ...................................................... 41 4.2.4 symfoware_close_all .................................................. 41 4.2.5 symfoware_columnprivileges ........................................... 41

Page 9: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

目次

viii

4.2.6 symfoware_columns .................................................... 42 4.2.7 symfoware_commit ..................................................... 44 4.2.8 symfoware_connect .................................................... 45 4.2.9 symfoware_cursor ..................................................... 46 4.2.10 symfoware_do ....................................................... 47 4.2.11 symfoware_error .................................................... 47 4.2.12 symfoware_errormsg ................................................. 49 4.2.13 symfoware_exec ..................................................... 49 4.2.14 symfoware_execute .................................................. 50 4.2.15 symfoware_fetch_array .............................................. 51 4.2.16 symfoware_fetch_into ............................................... 52 4.2.17 symfoware_fetch_object ............................................. 54 4.2.18 symfoware_fetch_row ................................................ 55 4.2.19 symfoware_field_len ................................................ 57 4.2.20 symfoware_field_name ............................................... 58 4.2.21 symfoware_field_num ................................................ 58 4.2.22 symfoware_field_precision .......................................... 59 4.2.23 symfoware_field_scale .............................................. 59 4.2.24 symfoware_field_type ............................................... 60 4.2.25 symfoware_foreignkeys .............................................. 60 4.2.26 symfoware_free_result .............................................. 60 4.2.27 symfoware_gettypeinfo .............................................. 62 4.2.28 symfoware_isnull ................................................... 65 4.2.29 symfoware_longreadlen .............................................. 65 4.2.30 symfoware_next_result .............................................. 67 4.2.31 symfoware_num_fields ............................................... 67 4.2.32 symfoware_num_rows ................................................. 67 4.2.33 symfoware_pconnect ................................................. 69 4.2.34 symfoware_prepare .................................................. 70 4.2.35 symfoware_primarykeys .............................................. 71 4.2.36 symfoware_procedurecolumns ......................................... 72 4.2.37 symfoware_procedures ............................................... 75 4.2.38 symfoware_result ................................................... 77 4.2.39 symfoware_result_all ............................................... 77 4.2.40 symfoware_rollback ................................................. 78 4.2.41 symfoware_setoption ................................................ 79 4.2.42 symfoware_specialcolumns ........................................... 79 4.2.43 symfoware_statistics ............................................... 79 4.2.44 symfoware_tableprivileges .......................................... 79 4.2.45 symfoware_tables ................................................... 79

第5章 PEAR for Symfowareの仕様 ................................................. 83 5.1 PEAR for Symfowareの概要 ................................................. 84 5.1.1 PEARの特徴 ........................................................... 84 5.1.2 PEAR for Symfowareのスクリプト例 ..................................... 84

Page 10: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

目次

ix

5.2 DBクラスのインクルード................................................... 86 5.2.1 require_once( "DB.php" ) ............................................. 86 5.3 DBクラス................................................................. 87 5.3.1 connect.............................................................. 87 5.3.2 disconnect........................................................... 89 5.3.3 isWarning............................................................ 89 5.3.4 isError.............................................................. 90 5.3.5 quote................................................................ 90 5.3.6 provides............................................................. 91 5.3.7 setFetchMode ......................................................... 92 5.3.8 prepare.............................................................. 94 5.3.9 execute.............................................................. 94 5.3.10 executeMultiple .................................................... 96 5.3.11 query.............................................................. 97 5.3.12 limitQuery ......................................................... 98 5.3.13 getOne............................................................. 99 5.3.14 getRow............................................................ 100 5.3.15 getCol............................................................ 102 5.3.16 getAssoc.......................................................... 103 5.3.17 getAll............................................................ 105 5.3.18 affectedRows ...................................................... 108 5.3.19 nextId............................................................ 109 5.3.20 createSequence .................................................... 109 5.3.21 dropSequence ...................................................... 109 5.3.22 tableInfo......................................................... 109 5.3.23 getListOf......................................................... 110 5.3.24 autoCommit ........................................................ 110 5.3.25 commit............................................................ 111 5.3.26 rollback.......................................................... 111 5.3.27 errorNative ....................................................... 111 5.4 DB_Resultクラス......................................................... 114 5.4.1 fetchRow............................................................ 114 5.4.2 fetchInto........................................................... 116 5.4.3 numCols............................................................. 117 5.4.4 numRows............................................................. 118 5.4.5 nextResult.......................................................... 119 5.4.6 free................................................................ 119 5.5 DB_Errorクラス.......................................................... 121 5.5.1 getMessage.......................................................... 121 5.5.2 toString............................................................ 121 5.6 DB_Warningクラス........................................................ 122 5.7 Cacheクラス............................................................. 123 第6章 PHPlib for Symfowareの仕様.............................................. 125 6.1 PHPlib for Symfowareの概要.............................................. 126

Page 11: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

目次

x

6.1.1 PHPlibの特徴 ........................................................ 126 6.1.2 PHPlibで使用するファイル ............................................ 126 6.2 PHPlibの使用例 .......................................................... 130 6.2.1 セション機能の使用例 ................................................ 130 6.2.2 認証機能の使用例 .................................................... 130 6.2.3 パーミッション管理機能の使用例 ...................................... 132 6.2.4 ユーザ変数機能の使用例 .............................................. 133

第7章 PHP Symfowareの環境設定 ................................................. 135 7.1 PHP動作環境ファイル ..................................................... 136 7.2 パラメタの詳細 .......................................................... 137 7.2.1 symfoware.default_db ................................................ 137 7.2.2 symfoware.default_user .............................................. 137 7.2.3 symfoware.default_pw ................................................ 137 7.2.4 symfoware.allow_persistent .......................................... 138 7.2.5 symfoware.check_persistent .......................................... 138 7.2.6 symfoware.max_persistent ............................................ 138 7.2.7 symfoware.max_links ................................................. 139 7.2.8 symfoware.defaultlrl ................................................ 139 7.2.9 symfoware.defaultbinmode ............................................ 139

第8章 RDBコマンドの呼び出し ................................................... 141 8.1 RDBコマンドの呼び出し方法 ............................................... 142 8.2 RDBコマンドの呼び出し例 ................................................. 143 8.2.1 systemを用いたRDBコマンドの呼び出し ................................. 143 8.2.2 execを用いたRDBコマンドの呼び出し ................................... 143 8.2.3 popenを用いたRDBコマンドの呼び出し .................................. 144

第9章 注意事項 ................................................................ 145 9.1 PHP Symfowareの制限 ..................................................... 146 9.2 RDBコマンドの呼び出しの制限 ............................................. 147 9.3 マルチバイト文字列の注意 ................................................ 148 9.3.1 マルチバイト文字列の問題 ............................................ 148 9.3.2 UTF-8 ............................................................... 149 9.3.3 マルチバイト対応関数 ................................................ 149 9.3.4 シフトJIS対応PHP .................................................... 150

付録A connect、pconnectのパラメタの記述形式 ................................... 151 付録B PHP Symfowareの修正履歴 ................................................. 153 付録C PHP Symfowareのソースの構成 ............................................. 155

Page 12: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第1章 Perl DBI・DBD::Symfowareの概要

本章では、Perl、DBI、DBD::Symfowareの概要について説明します。 1.1 Perlとは 1.2 DBI、DBD::Symfowareとは

Page 13: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第1章 Perl DBI・DBD::Symfowareの概要

2

1.1 Perlとは

Perlについて説明します。

Perlとは Perl(Practical Extraction and Report Language:実用データ取得レポート作成言語)は、インタプリタ型のプログラミング言語です。

Perlスクリプト、Perlモジュール、クラスインタフェース Perlが処理するプログラムのことをPerlスクリプトと呼びます。 Perlスクリプトから関数インタフェースで外部プログラムを呼び出すことができます。外部プログラムのことをPerlモジュールと呼びます。 Perl 5でオブジェクト思考の概念が追加され、クラスインタフェースでプログラムの呼び出しができるようになりました。

Perlの公開形態 CPAN(Comprehensive Perl Archive Network:統合Perlアーカイブネットワーク)が、PerlソースをWebで公開しています。 PerlはGPL(GNU General Public License:一般公的使用承諾)と呼ばれるライセンスに基づいて公開されています。動作保証がないといったGPLの各種条件を承諾することにより、無償でPerlを使用することができます。 SolarisマシンにPerlを導入する場合、CPANが公開しているPerlソースをビルドしてインストールするのが一般的です。 LinuxマシンにはPerlがインストールされています。 WindowsマシンにPerlを導入する場合、CPANが公開しているPerlソースをビルドすることはできますが、Windowsではソースをビルドするということが一般的ではありません。Active Stateが、CPANで公開されているPerlソースを元に、Windowsの文化(たとえば、インストーラ形式による提供、拡張子の関連付け)に合わせた機能を付加したActive Perlを開発し、公開しています。よって、Active Perlをインストールするのが一般的です。

Page 14: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

1.2 DBI、DBD::Symfowareとは

3

1.2 DBI、DBD::Symfowareとは

DBI、DBD::Symfowareについて説明します。

従来のデータベースのアクセス これまで、各データベースベンダは、データベースベンダごとにSQL文を処理するインタプリタ型の言語や、SQL文をC言語などのプログラミング言語に埋め込むといったデータベースのアクセスの手段を提供してきました。データベースのアクセスの手段は、各データベースベンダによって統一しておらず、完全な互換は保証できませんでした。

Perlのデータベースのアクセス Perlスクリプトからデータベースをアクセスするために、Perlの有志によって各データベースベンダ固有のデータベースアクセス処理を行う関数インタフェースのPerlモジュールが用意されました。 複数のデータベースベンタのデータベースをアクセスする場合は、複数の関数インタフェースを使用することになるという欠点があります。

Perlのデータベースアクセスの抽象化 複数のデータベースベンダのデータベースのアクセスを1つのクラスインタフェースで行うために、DBI(Database Interface:データベースインタフェース)と呼ばれるクラスインタフェースのPerlモジュールが用意されました。 DBIの処理を実装するために、各データベースベンダごとにDBD(Database Driver:データベースドライバ)と呼ばれるPerlモジュールを用意する必要があります。DBDでは各データベースベンダ固有のデータベースアクセス処理を行います。

DBI、DBD::Symfoware Symfoware/RDB用のDBDである“DBD::Symfoware”を提供します。これにより、PerlスクリプトからSymfoware/RDBのアクセスを可能にします。

DBD::Symfowareの公開形態 Perlの公開形態と同様に、DBD::SymfowareはGPL(GNU General Public License:一般公的使用承諾)と呼ばれるライセンスに基づいて公開します。動作保証がないといったGPLの各種条件を承諾することにより、無償でDBD::Symfowareを使用することができます。

Page 15: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第1章 Perl DBI・DBD::Symfowareの概要

4

DBD::Symfowareは充分なテストを行った上でリリースしていますが、Perl、DBI、DBD::Symfowareの最終的な動作保証については、ご自身の責任でお願いします。

対話ツール dbish DBIにはdbishと呼ばれる対話的にSQL文を実行するコマンドが添付されています。dbishを用いることにより、Perlスクリプトを作成しなくても簡単なデータベースのアクセスを行うことができます。

Page 16: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第2章 Perl DBI・DBD::Symfowareの導入

本章では、Perl、DBI、DBD::Symfowareの導入について説明します。 2.1 SolarisおよびLinuxの場合の導入方法 2.2 Windowsの場合の導入方法

Page 17: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第2章 Perl DBI・DBD::Symfowareの導入

6

2.1 SolarisおよびLinuxの場合の導入方法

SolarisおよびLinuxでの、Perl、DBI、DBD::Symfowareの導入方法について説明します。 各ソフトウェアのデフォルトの設定で説明します。デフォルト以外の設定を行った場合は、適宣、読み替えてください。

2.1.1 インストール済みパッケージのアンインス

トール

インストール済みパッケージのアンインストールについて説明します。

Solarisの場合のインストール済みパッケージのアンインストール Solarisの場合、インストール済みパッケージのアンインストールの作業は不要です。

Linuxの場合のインストール済みパッケージ すでにインストールされているDBIは古いことが多く、すでにインストールされているDBIを使用する場合、最新にて追加された機能を使用することができないことがあります。 また、DBD::Symfowareは、DBI 1.20で規定された内部インタフェースを使用していますので、DBI 1.20未満でDBD::Symfowareを使用することはできません。 よって、すでにインストールされているDBIはアンインストールし、最新のDBIをインストールすることを推奨します。

Linuxの場合のインストール済みパッケージのアンインストール 1. スーパ・ユーザでログインしてください。 2. 以下のコマンドでDBIがインストールされていることを確認してください。 rpm -qa | grep perl-DBI

3. 以下のコマンドでDBIをアンインストールしてください。 rpm -qa | grep perl-DBI | xargs rpm -e

4. アンインストールで、“エラー: これらのパッケージを削除すると依存関係を破壊します:”というエラーが発生することがあります。このとき、3.と同様の操作で依存関係にあるパッケージを削除するか、以下のコマンドで依存関係にあるパッケージを無視してDBIをアンインストールしてください。 rpm -qa | grep perl-DBI | xargs rpm -e --nodeps

5. アンインストールで、“cannot remove /絶対パス名 - directory not empty”というエラーが発生することがありますが、アンインストール

Page 18: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

2.1 SolarisおよびLinuxの場合の導入方法

7

自体は成功しています。ディレクトリ配下のファイルは、必要に応じてバックアップしてください。

6. 以下のコマンドでDBIがインストールされていないことを確認してください。 rpm -qa | grep perl-DBI

2.1.2 アーカイバのインストール

アーカイバのインストールについて説明します。

Solaris2.6の場合のアーカイバのインストール 1. Solaris Package Archive (http://www.ibiblio.org/pub/packages/solaris/sparc/)から、アーカイバパッケージのアーカイブ (GNUzip.1.2.4.SPARC.Solaris.2.6.pkg.tar)を入手してください。

2. スーパ・ユーザでログインしてください。 3. アーカイバパッケージのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。

4. 以下のコマンドで任意の作業ディレクトリに移動してください。 cd /tmp

5. 以下のコマンドで任意の作業ディレクトリにアーカイバパッケージを展開してください。 tar xvf GNUzip.1.2.4.SPARC.Solaris.2.6.pkg.tar

6. 以下のコマンドでアーカイバパッケージをインストールしてください。 pkgadd -d . GNUzip

7. 環境変数PATHに/usr/local/bin、MANPATHに/usr/local/manを追加してください。

Solaris7の場合のアーカイバのインストール 1. Solaris Package Archive (http://www.ibiblio.org/pub/packages/solaris/sparc/)から、アーカイバパッケージのアーカイブ (GNUzip.1.2.4.SPARC.32bit.Solaris.7.pkg.tar)を入手してください。

2. スーパ・ユーザでログインしてください。 3. アーカイバパッケージのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。

4. 以下のコマンドで任意の作業ディレクトリに移動してください。 cd /tmp

5. 以下のコマンドで任意の作業ディレクトリにアーカイバパッケージを展開してください。 tar xvf GNUzip.1.2.4.SPARC.32bit.Solaris.7.pkg.tar

6. 以下のコマンドでアーカイバパッケージをインストールしてください。 pkgadd -d . GNUzip

7. 環境変数PATHに/usr/local/bin、MANPATHに/usr/local/manを追加して

Page 19: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第2章 Perl DBI・DBD::Symfowareの導入

8

ください。

Solaris8の場合のアーカイバのインストール 1. スーパ・ユーザでログインしてください。 2. OSをインストールしたときに、すでにアーカイバをインストールしている可能性があります。以下のコマンドでアーカイバがインストールされているかを確認してください。 pkginfo -l SUNWgzip

3. すでにアーカイバがインストールされている場合、7.に進んでください。 4. Solaris 8 Software 2 of 2 SPARC Platform Edition CDを入手してください。

5. CD-ROMをマウント(ここでは/cdrom/cdrom0にマウントしたと仮定します)し、CDをセットしてください。

6. 以下のコマンドでアーカイバパッケージをインストールしてください。 pkgadd -d /cdrom/cdrom0/Solaris_8/Product SUNWgzip

7. 環境変数PATHに/usr/local/bin、MANPATHに/usr/local/manを追加してください。

Solaris9の場合のアーカイバのインストール 1. スーパ・ユーザでログインしてください。 2. OSをインストールしたときに、すでにアーカイバをインストールしている可能性があります。以下のコマンドでアーカイバがインストールされているかを確認してください。 pkginfo -l SUNWgzip

3. すでにアーカイバがインストールされている場合、7.に進んでください。 4. Solaris 9 Software 2 of 2 SPARC Platform Edition CDを入手してください。

5. CD-ROMをマウント(ここでは/cdrom/cdrom0にマウントしたと仮定します)し、CDをセットしてください。

6. 以下のコマンドでアーカイバパッケージをインストールしてください。 pkgadd -d /cdrom/cdrom0/Solaris_9/Product SUNWgzip

7. 環境変数PATHに/usr/local/bin、MANPATHに/usr/local/manを追加してください。

Linuxの場合のアーカイバのインストール Linuxの場合、アーカイバのインストールの作業は不要です。

2.1.3 コンパイラのインストール

コンパイラのインストールについて説明します。

Solaris2.6の場合のコンパイラのインストール 1. Solaris Package Archive (http://www.ibiblio.org/pub/packages/solaris/sparc/)から、コンパイラパッケージのアーカイブ

Page 20: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

2.1 SolarisおよびLinuxの場合の導入方法

9

(GNUgcc.2.95.2.SPARC.Solaris.2.6.pkg.tgz)を入手してください。 2. スーパ・ユーザでログインしてください。 3. コンパイラパッケージのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。

4. 以下のコマンドで任意の作業ディレクトリに移動してください。 cd /tmp

5. 以下のコマンドで任意の作業ディレクトリにコンパイラパッケージを展開してください。 gunzip -c GNUgcc.2.95.2.SPARC.Solaris.2.6.pkg.tgz | tar xvf -

6. 以下のコマンドでコンパイラパッケージをインストールしてください。 pkgadd -d . GNUgcc

7. 環境変数PATHに/usr/local/bin、MANPATHに/usr/local/manを追加してください。

8. 環境変数PATHにmakeコマンドのパスを追加します。makeコマンドは/usr/ccs/bin/make、/usr/xpg4/bin/makeがあります。シェルのスタートアップファイルで環境変数を設定する場合は、既存のmakeコマンドを用いた業務に影響を与えないよう注意してください。

Solaris7の場合のコンパイラのインストール 1. Solaris Package Archive (http://www.ibiblio.org/pub/packages/solaris/sparc/)から、コンパイラパッケージのアーカイブ (GNUgcc.2.95.2.SPARC.32bit.Solaris.7.pkg.tgz)を入手してください。

2. スーパ・ユーザでログインしてください。 3. コンパイラパッケージのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。

4. 以下のコマンドで任意の作業ディレクトリに移動してください。 cd /tmp

5. 以下のコマンドで任意の作業ディレクトリにコンパイラパッケージを展開してください。 gunzip -c GNUgcc.2.95.2.SPARC.32bit.Solaris.7.pkg.tgz | tar xvf -

6. 以下のコマンドでコンパイラパッケージをインストールしてください。 pkgadd -d . GNUgcc

7. 環境変数PATHに/usr/local/bin、MANPATHに/usr/local/manを追加してください。

8. 環境変数PATHにmakeコマンドのパスを追加します。makeコマンドは/usr/ccs/bin/make、/usr/xpg4/bin/makeがあります。シェルのスタートアップファイルで環境変数を設定する場合は、既存のmakeコマンドを用いた業務に影響を与えないよう注意してください。

Solaris8およびSolaris9の場合のコンパイラのインストール 1. Solaris Package Archive (http://www.ibiblio.org/pub/packages/solaris/sparc/)から、コン

Page 21: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第2章 Perl DBI・DBD::Symfowareの導入

10

パイラパッケージのアーカイブ (GNUgcc.2.95.2.SPARC.32bit.Solaris.8.pkg.tgz)を入手してください。

2. スーパ・ユーザでログインしてください。 3. コンパイラパッケージのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。

4. 以下のコマンドで任意の作業ディレクトリに移動してください。 cd /tmp

5. 以下のコマンドで任意の作業ディレクトリにコンパイラパッケージを展開してください。 gunzip -c GNUgcc.2.95.2.SPARC.32bit.Solaris.8.pkg.tgz | tar xvf -

6. 以下のコマンドでコンパイラパッケージをインストールしてください。 pkgadd -d . GNUgcc

7. 環境変数PATHに/usr/local/bin、MANPATHに/usr/local/manを追加してください。

8. 環境変数PATHにmakeコマンドのパスを追加します。makeコマンドは/usr/ccs/bin/make、/usr/xpg4/bin/makeがあります。シェルのスタートアップファイルで環境変数を設定する場合は、既存のmakeコマンドを用いた業務に影響を与えないよう注意してください。

Linuxの場合のコンパイラのインストール Linuxの場合、コンパイラのインストールの作業は不要です。

2.1.4 Symfowareのインストール

Symfowareのインストールについて説明します。

Symfoware/RDBにリモートアクセスする場合のSymfowareのインストール

1. Symfoware Clientをインストールしてください。 2. Perlを使用するユーザの環境変数LD_LIBRARY_PATH、LD_PRELOADを設定してください。環境変数LD_LIBRARY_PATH、LD_PRELOADの詳細は、“RDBユーザーズガイド 応用プログラム開発編”の“応用プログラムの起動”を参照してください。

Symfoware/RDBにローカルアクセスする場合のSymfowareのインストール

1. Symfoware Serverをインストールしてください。 2. Perlを使用するユーザの環境変数LD_LIBRARY_PATH、LD_PRELOADを設定してください。環境変数LD_LIBRARY_PATH、LD_PRELOADの詳細は、“RDBユーザーズガイド 応用プログラム開発編”の“応用プログラムの起動”を参照してください。

3. PerlスクリプトからローカルのSymfoware/RDBに対するRDBコマンドを呼び出す場合、Perlを使用するユーザの環境変数PATH、LANGを設定してください。環境変数PATH、LANGの詳細は、“RDB管理者ガイド”の“環境

Page 22: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

2.1 SolarisおよびLinuxの場合の導入方法

11

変数の設定”を参照してください。

2.1.5 Perlのインストール

Perlのインストールについて説明します。

Solarisの場合のPerlのインストール 1. CPAN(http://www.perl.com/CPAN/modules/by-module/CPAN/)から、Perl ソースのアーカイブ(perl-5.6.1.tar.gz)を入手してください。

2. スーパ・ユーザでログインしてください。 3. Perlソースのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。

4. 以下のコマンドで任意の作業ディレクトリに移動してください。 cd /tmp

5. 以下のコマンドでPerlソースを展開してください。 gunzip -c perl-5.6.1.tar.gz | tar xvf -

6. 以下のコマンドでPerlソースディレクトリに移動してください。 cd /tmp/perl-5.6.1

7. 以下のコマンドでPerlのビルドの準備を行ってください。使用するコンパイラの問い合わせにはgccを指定し、その他の問い合わせには空エンターを指定してください。 ./Configure

8. 以下のコマンドでPerlをビルドおよびインストールしてください。 make make test make install

9. Perlを使用するユーザの環境変数PATHに/usr/local/bin、MANPATHに/usr/local/manを追加してください。

Perlのインストールをやりなおす場合、Perlソースのディレクトリを削除して、手順.3からやりなおしてください。

Linuxの場合のPerlのインストール Linuxの場合、Perlのインストールの作業は不要です。

2.1.6 DBIのインストール

DBIのインストールについて説明します。

DBIのインストール 1. CPAN(http://www.cpan.org/modules/by-module/DBI/)から、DBIソースのアーカイブ(DBI-1.30.tar.gz)を入手してください。

2. スーパ・ユーザでログインしてください。

Page 23: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第2章 Perl DBI・DBD::Symfowareの導入

12

3. DBIソースのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。

4. 以下のコマンドで任意の作業ディレクトリに移動してください。 cd /tmp

5. 以下のコマンドでDBIソースを展開してください。 gunzip -c DBI-1.30.tar.gz | tar xvf -

6. 以下のコマンドでDBIソースディレクトリに移動してください。 cd /tmp/DBI-1.30

7. 以下のコマンドでDBIをビルドおよびインストールしてください。 perl Makefile.PL make make test make install

DBIのインストールをやりなおす場合、DBIソースのディレクトリを削除して、手順.3からやりなおしてください。

2.1.7 DBD::Symfowareのインストール

DBD::Symfowareのインストールについて説明します。

DBD::Symfowareのインストール 1. スーパ・ユーザでログインしてください。 2. DBD::Symfowareソースのアーカイブ(DBD-Symfoware-1.00.tar.gz)を入手してください。

3. DBD::Symfowareソースのアーカイブを任意の作業ディレクトリ(ここでは/tmpと仮定します)に置いてください。

4. 以下のコマンドで任意の作業ディレクトリに移動してください。 cd /tmp

5. 以下のコマンドでDBD::Symfowareソースを展開してください。 gunzip -c DBD-Symfoware-1.00.tar.gz | tar xvf -

6. 以下のコマンドでDBD::Symfowareソースディレクトリに移動してください。 cd /tmp/DBD-Symfoware-1.00

7. Symfowareをデフォルト以外のディレクトリ配下にインストールした場合、環境変数SYMFOWARE_HOMEに/インストール先ディレクトリ名を設定してください。

8. 以下のコマンドでDBD::Symfowareをビルドおよびインストールしてください。 perl Makefile.PL make make install

Page 24: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

2.1 SolarisおよびLinuxの場合の導入方法

13

DBD::Symfowareのインストールをやりなおす場合、DBD::Symfowareソースのディレクトリを削除して、手順.3からやりなおしてください。

Page 25: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第2章 Perl DBI・DBD::Symfowareの導入

14

2.2 Windowsの場合の導入方法

Windowsでの、Perl、DBI、DBD::Symfowareの導入方法について説明します。

2.2.1 アーカイバのインストール

アーカイバのインストールについて説明します。

アーカイバのインストール 1. tar.gz形式、zip形式で圧縮されたファイルを展開することができるアーカイバを入手してください。

2. ソフトウェアをインストールすることができる権限を持つユーザでログオンしてください。

3. アーカイバをインストールしてください。

2.2.2 コンパイラのインストール

コンパイラのインストールについて説明します。 コンパイラのインストール後にSymfowareをインストールすることを推奨します。

DBI、DBD::Symfowareをビルドしてインストールする場合のコンパイラのインストール

1. ソフトウェアをインストールすることができる権限を持つユーザでログオンしてください。

2. Microsoft Visual C++ 6.0(Microsoft Visual C++ 5.0は不可)をインストールしてください。

DBI、DBD::SymfowareをPPM(Perl Package Manager)でインストールする場合のコンパイラのインストール

コンパイラのインストールは不要です。

2.2.3 Symfowareのインストール

Symfowareのインストールについて説明します。

Windows 95/98/Me/XPまたはWindows NT/2000/XPで、リモートのSymfoware/RDBをアクセスする場合のSymfowareのインストール

1. ソフトウェアをインストールすることができる権限を持つユーザでログオンしてください。

2. Symfoware Clientをインストールしてください。 3. インストール時に自動的に環境変数が設定されます。

Page 26: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

2.2 Windowsの場合の導入方法

15

Windows NT/2000/XPで、ローカルのSymfoware/RDBをアクセスする場合のSymfowareのインストール

1. ソフトウェアをインストールすることができる権限を持つユーザでログオンしてください。

2. Symfoware Serverをインストールしてください。 3. インストール時に自動的に環境変数が設定されます。

2.2.4 Perlのインストール

Perlのインストールについて説明します。

Windows NTまたはWindows 95/98の場合のPerlのインストール 1. Microsoft Installer(Windows NT の場合は http://download.microsoft.com/download/platformsdk/wininst/1.1/NT4/EN-US/InstMsi.exe、Windows 95/98の場合は http://download.microsoft.com/download/platformsdk/wininst/1.1/W9X/EN-US/InstMsi.exe)を入手してください。

2. Active State (http://www.activestate.com/ASPN/Downloads/ActivePerl/)から、Perlパッケージ(ActivePerl-5.6.1.631-MSWin32-x86.msi)を入手してください。

3. ソフトウェアをインストールすることができる権限を持つユーザでログオンしてください。

4. InstMsi.exeを任意の作業ディレクトリに置いてください。 5. ActivePerl-5.6.1.630-MSWin32-x86.msiを任意の作業ディレクトリに置いてください。

6. エクスプローラを起動し、InstMsi.exeをダブルクリックして、Microsoft Installerをインストールしてください。

7. エクスプローラを起動し、ActivePerl-5.6.1.630-MSWin32-x86.msiをダブルクリックして、ActivePerlをインストールしてください。

8. インストール時に自動的に環境変数が設定されます。

Windows 2000/XP、Windows Me/XPの場合のPerlのインストール 1. Active State(http://aspn.activestate.com/ASPN/Perl/)から、Perlパッケージ(ActivePerl-5.6.1.630-MSWin32-x86.msi)を入手してください。

2. ソフトウェアをインストールすることができる権限を持つユーザでログオンしてください。

3. ActivePerl-5.6.1.630-MSWin32-x86.msiを任意の作業ディレクトリに置いてください。

4. エクスプローラを起動し、ActivePerl-5.6.1.630-MSWin32-x86.msiをダブルクリックして、ActivePerlをインストールしてください。

5. インストール時に自動的に環境変数が設定されます。

Page 27: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第2章 Perl DBI・DBD::Symfowareの導入

16

2.2.5 DBIのインストール

DBIのインストールについて説明します。 なお、Active Stateが公開しているDBIのパッケージは、最新のDBIより古いことがあることに注意してください。

DBIをビルドしてインストールする場合 1. CPAN(http://www.cpan.org/modules/by-module/DBI/)から、DBIソースのアーカイブ(DBI-1.30.tar.gz)を入手してください。

2. ソフトウェアをインストールすることができる権限を持つユーザでログオンしてください。

3. アーカイバを用いて、任意の作業ディレクトリ(ここではC:¥TEMPと仮定します)にDBIソースを展開してください。

4. コマンドプロンプトを起動してください。 5. 以下のコマンドでDBIソースディレクトリに移動してください。 C: cd C:¥TEMP¥DBI-1.30

6. 以下のコマンドでDBIをビルドおよびインストールしてください。 perl Makefile.PL nmake nmake test nmake install

DBIのインストールをやりなおす場合、Perlソースのディレクトリを削除して、手順.3からやりなおしてください。

DBIをPPM(Perl Package Manager)でインストールする場合 1. Active State (http://www.activestate.com/PPMPackages/zips/6xx-builds-only/)から、DBIパッケージのアーカイブ(DBI.zip)を入手してください。

2. ソフトウェアをインストールすることができる権限を持つユーザでログオンしてください。

3. アーカイバを用いて、任意の作業ディレクトリ(ここではC:¥TEMP¥dbiと仮定します)にDBIパッケージを展開してください。

4. コマンドプロンプトを起動してください。 5. 以下のコマンドでDBIパッケージディレクトリに移動してください。 C: cd C:¥TEMP¥dbi

6. 以下のコマンドでDBIをインストールしてください。 ppm install dbi.ppd

Page 28: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

2.2 Windowsの場合の導入方法

17

2.2.6 DBD::Symfowareのインストール

DBD::Symfowareのインストールについて説明します。

DBD::Symfowareをビルドしてインストールする場合 1. DBD::Symfowareソースのアーカイブ(DBD-Symfoware-1.00.tar.gz)を入手してください。

2. ソフトウェアをインストールすることができる権限を持つユーザでログオンしてください。

3. アーカイバを用いて、任意の作業ディレクトリ(ここではC:¥TEMPと仮定します)にDBD::Symfowareソースを展開してください。

4. コマンドプロンプトを起動してください。 5. 以下のコマンドでDBD::Symfowareソースのディレクトリに移動してください。 C: cd C:¥TEMP¥DBD-Symfoware-1.00

6. 以下のコマンドでDBD::Symfowareをビルドおよびインストールしてください。 perl Makefile.PL nmake nmake install

DBD::Symfowareのインストールをやりなおす場合、DBD::Symfowareソースのディレクトリを削除して、手順.3からやりなおしてください。

DBD::SymfowareをPPM(Perl Package Manager)でインストールする場合

1. DBD::Symfowareパッケージのアーカイブ (DBD-Symfoware-ppm-1.00.zip)を入手します。

2. ソフトウェアをインストールすることができる権限を持つユーザでログオンしてください。

3. アーカイバを用いて、任意の作業ディレクトリ(ここではC:¥TEMP¥dbdと仮定します)にDBD::Symfowareパッケージを展開してください。

4. コマンドプロンプトを起動してください。 5. 以下のコマンドでDBD::Symfowareパッケージのディレクトリに移動してください。 C: cd C:¥TEMP¥dbd

6. 以下のコマンドでDBD::Symfowareをインストールしてください。 ppm install dbd-Symfoware.ppd

Page 29: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server
Page 30: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第3章 Perl DBI・DBD::Symfowareの使用

本章では、PerlからSymfoware/RDBのデータベースをアクセスする方法について説明します。 3.1 Perlスクリプトの作成・実行 3.2 dbishの実行 3.3 Perl DBI・DBD::Symfowareの規約

Page 31: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第3章 Perl DBI・DBD::Symfowareの使用

20

3.1 Perlスクリプトの作成・実行

Perlスクリプトの作成・実行について説明します。

Perlスクリプトの作成・実行 1. Perlスクリプトからアクセスするデータベースを作成してください。データベースの作成方法の詳細は、“RDB管理者ガイド”と“RDBユーザーズガイド データベース定義編”を参照してください。

2. エディタで、Perlスクリプトを作成してください。Perlスクリプトの簡単な例を以下に示します。 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { RaiseError => 1 } ) ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) ; $sth->execute ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } $dbh->disconnect ;

3. 必要に応じて、環境変数RDBCHARSET、RDBNCHARにPerlスクリプトの文字コードを指定してください。環境変数RDBCHARSET、RDBNCHARの詳細は、“RDBユーザーズガイド 応用プログラム開発編”の“環境変数”を参照してください。

4. Symfoware/RDBにローカルアクセスする場合、環境変数RDBNAMEにRDBシステム名を指定してください。省略した場合、RDB名なしのRDBシステムに接続します。環境変数RDBNAMEの詳細は、“RDBユーザーズガイド 応用プログラム開発編”の“マルチRDB運用のコネクション”を参照してください。

5. Symfoware/RDBにリモートアクセスする場合、Symfoware Serverのリモートアクセスの設定とRDBシステムの再起動を行う必要があります。リモートアクセスの設定の詳細は、“スタートガイド サーバ編”の“RDBのセットアップ”および“システム用の動作環境ファイルによる定義”の“MAX_CONNECT_TCP”を参照してください、。

6. 以下のコマンドでPerlスクリプトを実行します。 perl ファイル名

Page 32: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

3.2 dbishの実行

21

3.2 dbishの実行

dbishの実行について説明します。

dbishの実行 1. dbishからアクセスするデータベースを作成してください。データベースの作成方法の詳細は、“RDB管理者ガイド”と“RDBユーザーズガイド データベース定義編”を参照してください。

2. ローカルのSymfoware/RDBに接続する場合、環境変数RDBNAMEにRDBシステム名を指定してください。省略した場合、RDB名なしのRDBシステムに接続します。環境変数RDBNAMEの詳細は、“RDBユーザーズガイド 応用プログラム開発編”の“マルチRDB運用のコネクション”を参照してください。

3. リモートのSymfoware/RDBに接続する場合、Symfoware Serverのリモートアクセスの設定とRDBシステムの再起動を行う必要があります。リモートアクセスの設定の詳細は、“スタートガイド サーバ編”の“RDBのセットアップ”および“システム用の動作環境ファイルによる定義”の“MAX_CONNECT_TCP”を参照してください、。

4. 環境変数DBI_DSNにデータソース名を指定してください。データソース名の詳細は、“4.3.1 connect”の“パラメタ”を参照してください。環境変数DBI_DSNを省略した場合、dbishがデータソース名を問い合わせます。

5. 環境変数DBI_USERに認可識別子を指定してください。環境変数DBI_USERを省略した場合、dbishを実行するユーザの認可識別子が採用されます。

6. 環境変数DBI_PASSにパスワードを指定してください。環境変数DBI_USERを省略した場合はdbishを実行するユーザのパスワードが採用されます。環境変数DBI_USERを指定した場合はdbishがパスワードを問い合わせます。

7. 必要に応じて、環境変数DBI_TRACEを指定してください。環境変数DBI_TRACEの詳細は、“4.3.5 trace”を参照してください。

8. 以下のコマンドでdbishを実行します。環境変数DBI_DSN、DBI_USER、DBI_PASSの指定よりもコマンドで指定するデータソース名、認可識別子、パスワードのほうが優先されます。 dbish [ データソース名 [ 認可識別子 [ パスワード ] ] ]

9. dbishがデータソース名を問い合わせてきた場合、データソース名を指定してください。データソース名の詳細は、“4.3.1 connect”の“パラメタ”を参照してください。

10. dbishがパスワードを問い合わせてきた場合、パスワードを指定してください。

11. 以下のコマンドでSQL文を実行します。 dbi:Symfoware:RDBDB> SQL文を指定する。 dbi:Symfoware:RDBDB> /go (実行結果が表示されます。)

Page 33: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第3章 Perl DBI・DBD::Symfowareの使用

22

12. 以下のコマンドでdbishの使用方法を調べてください。 dbi:Symfoware:RDBDB> /help

13. 以下のコマンドでdbishを終了します。 dbi:Symfoware:RDBDB> /quit

dbishの実行例 dbishの実行例を以下に示します。 # dbish DBI::Shell xx.xx using DBI x.xx WARNING: The DBI::Shell interface and functionality are ======= very likely to change in subsequent versions! Available DBI drivers: 1: dbi:ExampleP 2: dbi:Proxy 3: dbi:Symfoware Enter driver name or number, or full 'dbi:...:...' DSN: dbi:Symfoware:RDBDB Connecting to 'dbi:Symfoware:RDBDB' as ''... @dbi:Symfoware:RDBDB> select * from stocks.stock Current statement buffer (enter '/' to execute or '/help' for help): select * from stocks.stock @dbi:Symfoware:RDBDB> /go PRODUCT_NUMBER,PRODUCT_NAME,STOCK_QUANTITY,WAREHOUSE_NUMBER '140','cassette deck ','120','2' '110','television ','85','2' [2 rows of 4 fields returned] @dbi:Symfoware:RDBDB> /format box @dbi:Symfoware:RDBDB> select * from stocks.stock Current statement buffer (enter '/' to execute or '/help' for help): select * from stocks.stock @dbi:Symfoware:RDBDB> /go +--------------+--------------------+--------------+----------------+ |PRODUCT_NUMBER|PRODUCT_NAME |STOCK_QUANTITY|WAREHOUSE_NUMBER| +--------------+--------------------+--------------+----------------+ | 140|cassette deck | 120| 2| +--------------+--------------------+--------------+----------------+ | 110|television | 85| 2| +--------------+--------------------+--------------+----------------+ [2 rows of 4 fields returned] @dbi:Symfoware:RDBDB> /quit Disconnecting from dbi:Symfoware:RDBDB. #

dbishの注意事項 dbishにはPerlスクリプト中の文字にEUC(Extended UNIX Code)、シフトJIS

Page 34: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

3.2 dbishの実行

23

コードが含まれているときの考慮が足りません。マルチバイト文字列の詳細は、“6.3 マルチバイト文字列の注意”を参照してください。

Page 35: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第3章 Perl DBI・DBD::Symfowareの使用

24

3.3 Perl DBI・DBD::Symfowareの規約

Perl DBI・DBD::Symfowareの規約について説明します。

3.3.1 Perl DBI・DBD::Symfowareの仕様

Perl DBI・DBD::Symfowareの仕様について説明します。

Perl DBI・DBD::Symfowareの仕様 DBIに関して書籍などの参考資料が出ており、DBIの仕様を規定しています。しかし、各データベースベンダが提供するDBDの動作によって、DBIの詳細な仕様が異なります。 本マニュアルではDBD::Symfowareを用いた場合のDBIの詳細な仕様を規定しています。書籍など参考資料のDBIの仕様と異なる箇所があります。

3.3.2 変数の規約

変数の規約について説明します。

変数の規約 Perlスクリプトの変数は、変数名の先頭に必ず$、@、%といった記号を付けます。この記号によって変数の構造が決まります。

$value 変数名の先頭の$は、単一の値を保持することを表します。 値が配列の参照の場合、$value->[要素番号]で配列の要素番号に対応した値を参照することができます。 値が連想配列への参照の場合、$value->{要素名}で名前に対応した値を参照することができます。

@values 変数名の先頭の@は、複数の値を配列で保持することを表します。 @valueの値は、$values[要素番号]で配列の要素番号に対応した値を参照することができます。配列の要素番号は0から始まる数値です。よって、配列の1要素目の要素番号は0です。

%values 変数名の先頭の%は、複数の値を要素名で対応付けて値を保持することを表します。これを連想配列と呼びます。連想配列のことをハッシュとも呼びます。 %valuesの値は、$values{要素名}で配列の要素名に対応した値を参照することができます。

¥$value 変数名の先頭の¥$は、メソッドの引数で値への参照を渡すことを表します。

Page 36: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

3.3 Perl DBI・DBD::Symfowareの規約

25

¥@values 変数名の先頭の¥@は、メソッドの引数で値の配列への参照を渡すことを示します。

¥%values 変数名の先頭の¥%は、メソッドの引数で値の連想配列への参照を渡すことを示します。

3.3.3 真、偽、不定

真、偽、不定について説明します。

真、true trueとは、0以外の値(一般には1であることが多いです。また特殊なtrueとして0E0があります)を表します。 Perlスクリプト中で、変数にtrueを設定するときは $value = 1 ; で行い、変数の値がtrueであることを判定するときは if( $value ) { } で行います。

偽、false falseとは、0、"0"または空文字列を表します。 Perlスクリプト中で、変数にfalseを設定するときは $value = 0 ; で行い、変数の値がfalseであることを判定するときは if( ! $value ) { } で行います。

不定、undef undefとは、値が設定されていない状態を表します。 Perlスクリプト中で、変数がundefであることを判定するときは if( ! defined $value ) { } で行い、変数の値がfalseまたは変数がundefであることを判定するときは if( ! $value ) { } で行います。

3.3.4 SQL文の規約

SQL文の規約について説明します。

使用できるSQL文 使用できるSQL文を以下に示します。 使用できるSQLの文、要素および機能については、“SQLリファレンスガイド”の“SQLと関数の一覧”を参照してください。 それぞれのSQL文の詳細については、“SQLリファレンスガイド”に記載されている各SQL文の説明記事を参照してください。 ● 動的SELECT文 ● INSERT文 ● UPDATE文:探索 ● UPDATE文:位置付け ● DELETE文:探索 ● DELETE文:位置付け

Page 37: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第3章 Perl DBI・DBD::Symfowareの使用

26

● スキーマ定義文 ● スキーマ操作文 ● 格納構造定義文 ● 格納構造操作文 ● 利用者制御文 ● アクセス制御文 ● システム制御文 ● CALL文 ● SET SCHEMA文 ● SET TRANSACTION文

動的SELECT文、INSERT文、UPDATE文:探索、UPDATE文:位置付け、DELETE文:探索、CALL文に、動的パラメタを指定し、動的パラメタに対応する値を指定することができます。参考資料によっては、動的パラメタのことをプレースホルダとも呼びます。 動的パラメタの詳細は、“SQLリファレンスガイド”の“値指定と相手指定”を参照してください。 表定義、インデックス定義に格納領域指定が省略されている場合、格納領域指定を付加します。格納領域指定を付加をするか否かを変更する場合、データソース名のパラメタに“CLI_STORAGE_AREA_AUTO_SET”を指定してください。データソース名の詳細は、“4.3.1 connect”の“パラメタ”を参照してください。 格納領域指定の詳細は、“SQLリファレンスガイド”の“CREATE TABLE文(表定義)”、“CREATE INDEX文(インデックス定義)”を参照してください。

Page 38: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

本章では、DBI・DBD::Symfowareを用いてSymfoware/RDBのデータベースをアクセスするときの仕様について説明します。 4.1 DBI・DBD::Symfowareの概要 4.2 DBIモジュールロード 4.3 DBIクラスメソッド 4.4 DBIユーティリティ関数 4.5 DBIクラス属性 4.6 すべてのハンドルに共通メソッド 4.7 すべてのハンドルに共通の属性 4.8 データベースハンドルメソッド 4.9 データベースハンドル属性 4.10 ステートメントハンドルメソッド 4.11 ステートメントハンドル属性

Page 39: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

28

4.1 DBI・DBD::Symfowareの概要

DBI・DBD::Symfowareの概要について説明します。

4.1.1 DBI・DBD::Symfowareスクリプト例

DBI・DBD::Symfowareのスクリプト例について説明します。

DBI・DBD::Symfoware Perlスクリプト例 本章で示している例は、主に以下のPerlスクリプトをベースにしたものを用いています。以下のPerlスクリプトを実行させるためには、ユーザ“rdbmng”がデータベース“RDBDB”、データベーススペース“DBSP1”、スキーマ“STOCKS”を定義しておく必要があります。 # 1. use DBI ; # 2. $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; # 3. $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; # 4. $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; # 5. $sth->execute ; # 6. while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; # 7. $dbh->disconnect or die "$DBI::errstr¥n" ;

1. DBIモジュールをロードします。 2. データベースに接続し、データベースハンドル“dbh”を取得します。エラーが発生したときに警告を発行しないオプションを指定していま

Page 40: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.1 DBI・DBD::Symfowareの概要

29

す(この場合、エラー処理を作り込む必要があります)。データベースハンドルが取得できないときは、例外を発行します。

3. データベースハンドル“dbh”を用いて、SQL文を実行します。復帰値が正常でないときは、例外を発行します。

4. データベースハンドル“dbh”を用いて、SQL文を準備し、ステートメントハンドル“sth”を取得します。ステートメントハンドルが取得できないときは、例外を発行します。

5. ステートメントハンドル“sth”を用いて、SQL文を実行します。 6. ステートメントハンドル“sth”を用いて、フェッチした一行のデータの入った配列“@array”を取得します。フェッチ中にエラーが発生していれば、例外を発行します。

7. データベースハンドル“dbh”を用いて、データベースの接続を切断します。復帰値が正常でないときは、例外を発行します。

上記のほかに、性能を考慮した記述方法、複数の記述を簡略するための記述方法など、DBIは豊富なインタフェースを持っています。

Page 41: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

30

4.2 DBIモジュールロード

DBIモジュールロードについて説明します。

4.2.1 use DBI

説明 use DBIは、DBIモジュールをロードします。

構文 use DBI ;

Page 42: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.3 DBIクラスメソッド

31

4.3 DBIクラスメソッド

DBIクラスメソッドについて説明します。

4.3.1 connect

説明 connectは、データベースに接続し、データベースハンドルオブジェクトへの参照を返却します。

構文 $dbh = DBI->connect( $data_source, $user_name, $password ) ; $dbh = DBI->connect( $data_source, $user_name, $password, ¥%set_attr ) ;

パラメタ $data_source : データソース名"dbi:ドライバ名:DBDに渡す文字列"を指定してください。 Symfoware/RDBにローカルアクセスする場合、"dbi:Symfoware:データベース名"または"dbi:Symfoware:データベース名;パラメタ"を指定してください。 Symfoware/RDBにリモートアクセスする場合、"dbi:Symfoware:データベース名,ホスト名,ポート番号"または"dbi:Symfoware:データベース名,ホスト名,ポート番号;パラメタ"を指定してください。 undefまたは空文字列の場合、環境変数DBI_DSNの値が採用されます。 パラメタについては、“付録A connect、connect_cachedのパラメタの記述形式”を参照してください。 $user_name : 認可識別子を指定してください。 undefの場合、環境変数DBI_USERの値が採用されます。 $password : パスワードを指定してください。 undefの場合、環境変数DBI_PASSの値が採用されます。 ¥%set_attr : すべてのハンドルに共通の属性の連想配列を指定してください。

戻り値 データベースハンドルオブジェクトへの参照が返却されます。 異常の場合、undefが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) ; if( ! defined $dbh ) { die "$DBI::errstr¥n" ; }

Page 43: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

32

$dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $rc = $dbh->disconnect ; if( ! $rc ) { die "$DBI::errstr¥n" ; }

4.3.2 connect_cached

説明 connect_cachedは、データベースに接続し、DBIクラス内でパラメタの値でデータベースハンドルオブジェクトを連想配列に格納し、データベースハンドルオブジェクトへの参照を返却します。 同じパラメタ値でconnect_cachedを呼び出した場合、前回のデータベース接続が有効であれば、データベース接続を再使用します。

構文 $dbh = DBI->connect_cached( $data_source, $user_name, $password ) ; $dbh = DBI->connect_cached( $data_source, $user_name, $password, ¥%set_attr ) ;

パラメタ $data_source : データソース名"dbi:ドライバ名:DBDに渡す文字列"を指定してください。 Symfoware/RDBにローカルアクセスする場合、"dbi:Symfoware:データベース名"または"dbi:Symfoware:データベース名;パラメタ"を指定してください。 Symfoware/RDBにリモートアクセスする場合、"dbi:Symfoware:データベース名,ホスト名,ポート番号"または"dbi:Symfoware:データベース名,ホスト名,ポート番号;パラメタ"を指定してください。 undefまたは空文字列の場合、環境変数DBI_DSNの値が採用されます。 パラメタについては、“付録A connect、connect_cachedのパラメタの記述形式”を参照してください。 $user_name : 認可識別子を指定してください。

Page 44: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.3 DBIクラスメソッド

33

undefの場合、環境変数DBI_USERの値が採用されます。 $password : パスワードを指定してください undefの場合、環境変数DBI_PASSの値が採用されます。 ¥%set_attr : すべてのハンドルに共通の属性の連想配列を指定してください。

戻り値 データベースハンドルオブジェクトへの参照が返却されます。 異常の場合、undefが返却されます。

例 use DBI ; $dbh1 = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh2 = DBI->connect_cached( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh3 = DBI->connect_cached( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh1->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh1->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh1->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh1->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $sth1 = $dbh2->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth2 = $dbh2->prepare_cached( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI:: errstr¥n" ; $sth3 = $dbh2->prepare_cached( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI:: errstr¥n" ; $sth1->execute ; $sth2->execute ; $sth3->execute ; $drh = $dbh1->{Driver} ; printf "Kids : %d¥n", $drh->{Kids} ; printf "ActiveKids : %d¥n", $drh->{ActiveKids} ; printf "Kids : %d¥n", $dbh3->{Kids} ; printf "ActiveKids : %d¥n", $dbh3->{ActiveKids} ; $hash_dbh = $drh->{CachedKids} ; @keys_dbh = keys(%$hash_dbh) ; $key_dbh = $keys_dbh[0] ; $hash_sth = $dbh2->{CachedKids} ; @keys_sth = keys( %$hash_sth ) ; $key_sth = $keys_sth[0] ; printf "Key : %s¥n", $key_dbh ; printf "Key : %s¥n", $key_sth ; $dbh = $hash_dbh->{$key_dbh} ; $sth = $hash_sth->{$key_sth} ; printf "Name : %s¥n", $dbh->{Name} ; printf "NUM_OF_FIELDS : %d¥n", $sth->{NUM_OF_FIELDS} ; $sth->finish or die "$DBI::errstr¥n" ; printf "Kids : %d¥n", $dbh3->{Kids} ;

Page 45: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

34

printf "ActiveKids : %d¥n", $dbh3->{ActiveKids} ; $sth1->finish or die "$DBI::errstr¥n" ; printf "Kids : %d¥n", $dbh3->{Kids} ; printf "ActiveKids : %d¥n", $dbh3->{ActiveKids} ; $dbh->disconnect or die "$DBI::errstr¥n" ; printf "Kids : %d¥n", $drh->{Kids} ; printf "ActiveKids : %d¥n", $drh->{ActiveKids} ; $dbh1->disconnect or die "$DBI::errstr¥n" ; printf "Kids : %d¥n", $drh->{Kids} ; printf "ActiveKids : %d¥n", $drh->{ActiveKids} ;

4.3.3 available_drivers

説明 available_driversは、@INCの示すディレクトリ内から利用できるDBDモジュールを探し、DBDのドライバ名の配列を返却します。 @INCの示すディレクトリ内に同じドライバ名があった場合、後から調べられるDBDのドライバは配列に登録されません。

構文 @drivers = DBI->available_drivers ; @drivers = DBI->available_drivers( $quiet ) ;

パラメタ $quiet : @INCの示すディレクトリ内に同じDBDのドライバ名があったときに警告を発生させない場合は、trueを指定してください。 @INCの示すディレクトリ内に同じDBDのドライバ名があったときに警告を発行させる場合は、falseを指定してください。

戻り値 ドライバ名の配列が返却されます。

例 use DBI ; foreach $inc ( @INC ) { printf "INC : %s¥n", $inc ; } @drivers = DBI->available_drivers( false ) ; foreach $driver ( @drivers ) { printf "driver : %s¥n", $driver ; }

Page 46: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.3 DBIクラスメソッド

35

4.3.4 data_sources

説明 data_sourcesは、指定したDBDのドライバで利用できるデータソース名の配列を返却します。 ドライバ名が"Symfoware"の場合、配列の要素数は0となります。

構文 @data_sources = DBI->data_sources( $driver ) ; @data_sources = DBI->data_sources( $driver, ¥%set_attr ) ;

パラメタ $driver : "Symfoware"を指定してください。 ¥%set_attr : 現在は、指定したときの動作は不定です。

戻り値 データソース名の配列が返却されます。

例 use DBI ; @data_sources = DBI->data_sources( "Symfoware" ) ; foreach $data_source ( @data_sources ) { printf "data source : %s¥n", $data_source ; }

4.3.5 trace

説明 traceは、トレース情報の出力を設定します。 traceを呼び出さない場合、環境変数DBI_TRACEの値が採用されます。環境変数DBI_TRACEに、"ファイル名"または"トレースレベル=ファイル名"を指定します。

構文 DBI->trace( $level ) ; DBI->trace( $level, $filename ) ;

パラメタ $level : トレースレベルを指定してください。トレースレベルと意味を以下に示します。 トレースレベル 意味 1~10 DBIの情報を出力します。

Page 47: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

36

トレースレベル 意味 11 DBD::Symfowareのメソッド呼び出し情報を出力します。 12 DBD::SymfowareからのCLI関数呼び出し情報を出力しま

す。 13 DBD::Symfowareの詳細情報を出力します。 $filename : トレース情報の出力先のファイル名を指定してください。標準出力にトレース情報を出力する場合、STDOUTを指定してください。 undefの場合、環境変数DBI_TRACEの値が採用されます。環境変数DBI_TRACEの値がundefの場合、標準エラー出力STDERRにトレース情報を出力します。

例 use DBI ; DBI->trace( 1 ) ; DBI->trace_msg( "*** connecting ***¥n" ) ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; DBI->trace_msg( "*** connected ***¥n" ) ; $dbh->trace( 2 ) ; printf "level : %d¥n", $dbh->{TraceLevel} ; $dbh->trace_msg( "*** doing ***¥n" ) ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ; $dbh->trace_msg( "*** done ***¥n" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; printf "level : %d¥n", $sth->{TraceLevel} ; $sth->trace( 3 ) ; printf "level : %d¥n", $sth->{TraceLevel} ; $sth->{TraceLevel} = 4 ; printf "level : %d¥n", $sth->{TraceLevel} ; $sth->trace_msg( "*** executing ***¥n" ) ; $sth->execute ; $sth->trace_msg( "*** executed ***¥n" ) ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; DBI->trace_msg( "*** disconnecting ***¥n" ) ; $dbh->disconnect or die "$DBI::errstr¥n" ; DBI->trace_msg( "*** disconnected ***¥n" ) ;

Page 48: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.3 DBIクラスメソッド

37

4.3.6 trace_msg

説明 trace_msgは、トレース情報に文字列を出力します。

構文 DBI->trace_msg( $text ) ; DBI->trace_msg( $text, $min_level ) ;

パラメタ $text : トレースに出力する文字列を指定してください。 $min_level : 文字列を出力するトレースレベルを指定してください。

例 “4.3.5 trace”の“例”を参照してください。

Page 49: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

38

4.4 DBIユーティリティ関数

DBIユーティリティ関数について説明します。

4.4.1 DBI::neat

説明 DBI::neatは、指定した値を整形し、その文字列を返却します。 文字列の前後をシングルクォーテーション(')で囲みます。文字列が4バイト以上かつ最大文字列長より長い場合、最大文字列長-4で切り捨てて、途中で切り捨てたことを示すピリオド3文字とシングルクォーテーション(...')を付加します。文字列中のシングルクォーテーション(')の前にシングルクォーテーション(')を付けません。 数値の場合、シングルクォーテーション(')で囲みません。 文字列中に印字不可能な文字は、ピリオド(.)に置き換えます。 マルチバイト文字列の考慮はありません。切り捨て時に、マルチバイト文字列の途中のバイトで切り捨てられることがあります。印字不可能な文字として、マルチマルチバイト文字列もピリオド(.)に置き換えられることがあります。マルチバイト文字列の詳細は、“6.3 マルチバイト文字列の注意”を参照してください。

構文 $str = DBI::neat( $value ) ; $str = DBI::neat( $value, $max_len ) ;

パラメタ $value : 整形する値を指定してください。 $max_len : 整形する文字列の最大長を指定してください。 0またはundefの場合、DBI::neat_maxlenの値が採用されます。

戻り値 整形した文字列が返却されます。

例 use DBI ; printf "neat_maxlen : %d¥n", $DBI::neat_maxlen ; @values = ( 1000, "abcd", "abcde" ) ; foreach $value ( @values ) { $str = DBI::neat( $value, 4 ) ; printf "%s¥n", $str ; } $str = DBI::neat_list( ¥@values, undef, '/' ) ; printf "$str¥n" ; $DBI::neat_maxlen = 4 ;

Page 50: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.4 DBIユーティリティ関数

39

printf "neat_maxlen : %d¥n", $DBI::neat_maxlen ; foreach $value ( @values ) { $str = DBI::neat( $value ) ; printf "%s¥n", $str ; } $str = DBI::neat_list( ¥@values ) ; printf "%s¥n", $str ;

4.4.2 DBI::neat_list

説明 DBI::neat_listは、指定した配列の値を整形し、その文字列を返却します。 内部的にDBI::neatを使用します。

構文 $str = DBI::neat_list( ¥@values ) ; $str = DBI::neat_list( ¥@values, $max_len ) ; $str = DBI::neat_list( ¥@values, $max_len, $field_sep ) ;

パラメタ ¥@values : 整形する値を指定してください。 $max_len : 整形する文字列の最大長を指定してください。 0またはundefの場合、DBI::neat_maxlenの値が採用されます。 $field_sep : 列の値を区切る記号を指定してください。 undefの場合、コンマと空白(, )が採用されます。

戻り値 整形した文字列が返却されます。

例 “4.4.1 DBI::neat”の“例”を参照してください。

4.4.3 DBI::looks_like_number

説明 DBI::looks_like_numberは、指定した値が数値のように見えるか否かを判定し、判定結果の配列を返却します。

構文 @bools = DBI::looks_like_number( @values ) ;

パラメタ @values :

Page 51: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

40

数値のように見えるか否かを判定する値の配列を指定してください。

戻り値 判定結果の配列が返却されます。 数値に見える場合、trueが返却されます。 数値に見えない場合、falseが返却されます。 undefまたは空文字列の場合、undefが返却されます。

例 use DBI ; @values = ( 1000, "abcd", undef, "" ) ; @bools = DBI::looks_like_number( @values ) ; for( $i = 0 ; $i < @values ; $i ++ ) { if( ! defined $bools[ $i ] ) { printf "undef¥n" ; } else { if( $bools[ $i ] ) { printf "true¥n" ; } else { printf "false¥n" ; } } }

Page 52: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.5 DBIクラス属性

41

4.5 DBIクラス属性

DBIクラス属性について説明します。

4.5.1 DBI::err

説明 DBI::errは、最後に使用したハンドルで実行したデータベースアクセスのSQLCODEを参照します。 DBI::errは参照のみ可能です。 SQLCODEは、過去のSQLインタフェースで、データベースアクセスのエラーコードを表します。現在はSQLCODEの利用を推奨していませんので、SQLCODEの詳細な仕様はありません。

構文 $rc = $DBI::err ;

戻り値 SQLCODEが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; # normal printf "err : %d¥n", $DBI::err ; printf "errstr : %s¥n", $DBI::errstr ; printf "state : %s¥n", $DBI::state ; printf "err : %d¥n", $dbh->err ; printf "errstr : %s¥n", $dbh->errstr ; printf "state : %s¥n", $dbh->state ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT _NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT -- ILLEGAL" ) ; # error printf "err : %d¥n", $DBI::err ; printf "errstr : %s¥n", $DBI::errstr ; printf "state : %s¥n", $DBI::state ; printf "err : %d¥n", $dbh->err ; printf "errstr : %s¥n", $dbh->errstr ; printf "state : %s¥n", $dbh->state ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ;

Page 53: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

42

while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } # normal printf "err : %d¥n", $sth->err ; printf "errstr : %s¥n", $sth->errstr ; printf "state : %s¥n", $sth->state ; $sth = $dbh->prepare( "SELECT 300 / ( PRODUCT_NUMBER - 110 ) FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } # error printf "err : %d¥n", $DBI::err ; printf "errstr : %s¥n", $DBI::errstr ; printf "state : %s¥n", $DBI::state ; printf "err : %d¥n", $dbh->err ; printf "errstr : %s¥n", $dbh->errstr ; printf "state : %s¥n", $dbh->state ; printf "err : %d¥n", $sth->err ; printf "errstr : %s¥n", $sth->errstr ; printf "state : %s¥n", $sth->state ; $dbh->do( "DELETE FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; # normal printf "err : %d¥n", $DBI::err ; printf "errstr : %s¥n", $DBI::errstr ; printf "state : %s¥n", $DBI::state ; $dbh->do( "DELETE FROM STOCKS.STOCK" ) ; # no record printf "err : %d¥n", $DBI::err ; printf "errstr : %s¥n", $DBI::errstr ; printf "state : %s¥n", $DBI::state ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.5.2 DBI::errstr

説明 DBI::errstrは、最後に使用したハンドルで実行したデータベースアクセスのSQLMSGを参照します。 SQLMSGは、データベースアクセスのエラーメッセージの文字列です。SQLMSGの詳細は、“まえがき”の“Symfoware/RDBが出力するメッセージの処置を参照する”を参照してください。 DBI::errstrは参照のみ可能です。

構文 $str = $DBI::errstr ;

戻り値 SQLMSGが返却されます。

Page 54: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.5 DBIクラス属性

43

例 “4.5.1 DBI::err”の“例”を参照してください。

4.5.3 DBI::state

説明 DBI::stateは、最後に使用したハンドルで実行したデータベースアクセスのSQLSTATEを参照します。 SQLSTATEはデータベースアクセスの状態を5バイトの文字列で表し、正常の場合は"00000"です。SQLSTATEの詳細は、“SQLリファレンスガイド”の“SQLSTATE”を参照してください。 DBI::stateは参照のみ可能です。

構文 $str = $DBI::state ;

戻り値 SQLSTATEが返却されます。

例 “4.5.1 DBI::err”の“例”を参照してください。

4.5.4 DBI::rows

説明 DBI::rowsは、最後に使用したステートメントハンドルの実行により影響を受けた行数を参照します。 DBI::rowsは参照のみ可能です。

構文 $rc = $DBI::rows ;

戻り値 SQL文が動的SELECT文の場合、-1が返却されます。 SQL文がINSERT文、UPDATE文:探索、UPDATE文:位置付け、DELETE文:探索、DELETE文:位置付けの場合、更新件数が返却されます。 SQL文が動的SELECT文、INSERT文、UPDATE文:探索、DELETE文:探索以外の場合、0E0が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $sth = $dbh->prepare( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ;

Page 55: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

44

$rc = $sth->execute or die "$DBI::errstr¥n" ; printf "rc : $rc¥n" ; printf "rc : %d¥n", $rc ; printf "rows : $DBI::rows¥n" ; printf "rows : %d¥n", $DBI::rows ; $rc = $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2)" ) or die "$DBI::errstr¥n" ; printf "rc : %d¥n", $rc ; printf "rows : $DBI::rows¥n" ; printf "rows : %d¥n", $DBI::rows ; $sth = $dbh->prepare( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $rc = $sth->execute or die "$DBI::errstr¥n" ; printf "rc : %d¥n", $rc ; printf "rows : %d¥n", $DBI::rows ; printf "rows : %d¥n", $sth->rows ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $rc = $sth->execute ; printf "rc : %d¥n", $rc ; printf "rows : %d¥n", $DBI::rows ; printf "rows : %d¥n", $sth->rows ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.5.5 DBI::neat_maxlen

説明 DBI::neat_maxlenは、DBI::neat、DBI::neat_listで整形する文字列のデフォルトの最大長(バイト数)を設定または参照します。 DBI::neat_maxlenは設定可能です。 DBI::neat_maxlenのデフォルトは400です。

構文 $DBI::neat_maxlen = $max_len ; $max_len = $DBI::neat_maxlen ;

設定値 $max_len : 整形する文字列のデフォルトの最大長を設定してください。

戻り値 整形する文字列のデフォルトの最大長が返却されます。

例 “4.4.1 DBI::neat”の“例”を参照してください。

Page 56: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.6 すべてのハンドルに共通のメソッド

45

4.6 すべてのハンドルに共通のメソッド

すべてのハンドルに共通のメソッドについて説明します。

4.6.1 err

説明 errは、ハンドルで実行したデータベースアクセスのSQLCODEを返却します。 SQLCODEは、過去のSQLインタフェースで、データベースアクセスのエラーコードを表します。現在はSQLCODEの利用を推奨していませんので、SQLCODEの詳細な仕様はありません。

構文 $rc = $h->err ;

戻り値 SQLCODEが返却されます。

例 “4.5.1 DBI::err”の“例”を参照してください。

4.6.2 errstr

説明 errstrは、ハンドルで実行したデータベースアクセスのSQLMSGを返却します。 SQLMSGの詳細は、”まえがき”の”Symfoware/RDBが出力するメッセージの処置を参照する”を参照してください。

構文 $str = $h->errstr ;

戻り値 SQLMSGが返却されます。

例 “4.5.1 DBI::err”の“例”を参照してください。

4.6.3 state

説明 stateは、ハンドルのメソッドで最後に実行したデータベースアクセスのSQLSTATEを返却します。 SQLSTATEはデータベースアクセスの状態を5バイトの文字列で表し、正常の場合は"00000"です。 SQLSTATEの詳細は、“SQLリファレンスガイド”の

Page 57: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

46

“SQLSTATE”を参照してください。

構文 $str = $h->state ;

戻り値 SQLMSGが返却されます。

例 “4.5.1 DBI::err”の“例”を参照してください。

4.6.4 set_err

説明 set_errは、SQLCODE、SQLMSG、SQLSTATEを設定します。 set_errは、HandleErrorで指定したサブルーチンの処理で使用します。

構文 $h->set_err( $code, $msg ) ; $h->set_err( $code, $msg, $state, $method_name ) ; $h->set_err( $code, $msg, $state, $method_name, $rc ) ;

パラメタ $code : SQLCODEに相当する数値を指定してください。 $msg : SQLMSGに相当する文字列を指定してください。 $state : SQLSTATEに相当する文字列を指定してください。 $method_name : エラーが発生したメソッド名を任意のメソッド名に変更する場合、メソッド名を指定してください。 $rc : 任意の復帰値に変更する場合、復帰値を指定してください。

例 “4.7.3 HandleError”の“例”を参照してください。

4.6.5 trace

説明 traceは、ハンドルのトレース情報の出力を設定します。

構文 $h->trace( $level ) ; $h->trace( $level, $file_name ) ;

Page 58: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.6 すべてのハンドルに共通のメソッド

47

パラメタ $level : トレースレベルを指定してください。トレースレベルと意味を以下に示します。 トレースレベル 意味 1~10 DBIの情報を出力します。 11 DBD::Symfowareのメソッド呼び出し情報を出力します。 12 DBD::SymfowareからのCLI関数呼び出し情報を出力しま

す。 13 DBD::Symfowareの詳細情報を出力します。 $file_name : トレース情報の出力先のファイル名を指定してください。標準出力にトレース情報を出力する場合、STDOUTを指定してください。 undefの場合、環境変数DBI_TRACEの値が採用されます。環境変数DBI_TRACEの値がundefの場合、標準エラー出力STDERRにトレース情報を出力します。

例 “4.3.5 trace”の“例”を参照してください。

4.6.6 trace_msg

説明 trace_msgは、ハンドルのトレース情報に文字列を出力します。

構文 $h->trace_msg( $text ) ; $h->trace_msg( $text, $min_level ) ;

パラメタ $text : トレース情報に出力する文字列を指定してください。 $min_level : 文字列を出力するトレースレベルを指定してください。

例 “4.3.5 trace”の“例”を参照してください。

4.6.7 func

説明 funcは未サポートです。 funcを使用したときの動作は不定です。

Page 59: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

48

4.7 すべてのハンドルに共通の属性

すべてのハンドルに共通の属性について説明します。

4.7.1 Warn

説明 Warnは、ハンドル内でエラーが発生したとき、強制的に警告を発行させるか否かを設定または参照します。 Warnは設定可能です。 Warnのデフォルトは強制的に警告を発行させます。 Warnは親ハンドルから作成された子ハンドルに継承されます。

構文 $h->{Warn} = $bool ; $bool = $h->{Warn} ;

設定値 $bool : 強制的に警告を発行させる場合、trueを指定してください。 強制的に警告を発行させない場合、falseを指定してください。

戻り値 強制的に警告を発行させる場合、trueが返却されます。 強制的に警告を発行させない場合、falseが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->disconnect or die "$DBI::errstr¥n" ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; @array = $sth->fetchrow_array ; printf "@array¥n" ; printf "Warn : %s¥n", $dbh->{Warn} ? "true" : "false" ; $dbh->disconnect or die "$DBI::errstr¥n" ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError =>

Page 60: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.7 すべてのハンドルに共通の属性

49

0 } ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; @array = $sth->fetchrow_array ; printf "@array¥n" ; $dbh->{Warn} = 0 ; printf "Warn : %s¥n", $dbh->{Warn} ? "true" : "false" ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.7.2 Active

説明 Activeは、ハンドルが活性状態か否かを返却します。 データベースハンドルの場合、disconnectで非活性状態となります。ステートメントハンドルの場合、すべてのデータをフェッチするかfinishの呼び出しで非活性状態となります。 Activeは参照のみ可能です。

構文 $bool = $h->{Active} ;

戻り値 ハンドルが活性状態の場合、trueが返却されます。 ハンドルが非活性状態の場合、falseが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; printf "Active : %s¥n", $dbh->{Active} ? "true" : "false" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; printf "Active : %s¥n", $sth->{Active} ? "true" : "false" ; $sth->execute ; printf "Active : %s¥n", $sth->{Active} ? "true" : "false" ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; printf "Active : %s¥n", $sth->{Active} ? "true" : "false" ; $dbh->disconnect or die "$DBI::errstr¥n" ; printf "Active : %s¥n", $dbh->{Active} ? "true" : "false" ;

Page 61: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

50

4.7.3 HandleError

説明 HandleErrorは、警告エラーが発生したときに呼び出すサブルーチンへの参照を設定します。 HandleErrorは設定のみ可能です。 HandleErrorは親ハンドルから作成された子ハンドルに継承されます。 サブルーチンの第一引数は、RaiseErrorやPrintErrorに出力される文字列が設定されます。 サブルーチンの第二引数は、DBIハンドルが設定されます。

構文 $h->{HandleError} = sub { 処理 } ;

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 1 } ) or die "$DBI::errstr¥n" ; $dbh->{HandleError} = sub { printf "message : %s¥n", $_[0] ; printf "err : %s¥n", $_[1]->err ; printf "errstr : %s¥n", $_[1]->errstr ; printf "state : %s¥n", $_[1]->state ; $_[0] = "ERROR" ; $_[1]->set_err( -99, "error", "zzzzz", "?", -999 ) ; return 0 ; } ; $dbh->do( "CREATE TABLE -- ILLEGAL" ) ; printf "err : %d¥n", $DBI::err ; printf "errstr : %s¥n", $DBI::errstr ; printf "state : %s¥n", $DBI::state ; $dbh->{HandleError} = sub { printf "message : %s¥n", $_[0] ; printf "err : %s¥n", $_[1]->err ; printf "errstr : %s¥n", $_[1]->errstr ; printf "state : %s¥n", $_[1]->state ; $_[1]->set_err( 0, "", "aaaaa" ) ; $_[2] = undef ; return 1 ; # no error } ; $sth = $dbh->prepare( "SELECT -- ILLEGAL" ) ; printf "err : %d¥n", $DBI::err ; printf "errstr : %s¥n", $DBI::errstr ; printf "state : %s¥n", $DBI::state ; $dbh->disconnect or die "$DBI::errstr¥n" ;

Page 62: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.7 すべてのハンドルに共通の属性

51

4.7.4 ShowErrorStatement

説明 ShowErrorStatementは、prepareまたはdoでエラーが発生したときに、警告および例外で表示するエラーメッセージにエラーの原因となったSQL文を埋め込ませるか否かを設定または参照します。 ShowErrorStatementのデフォルトはエラーの原因となったSQL文を埋め込ませません。 ShowErrorStatementは設定可能です。 ShowErrorStatementは親ハンドルから作成された子ハンドルに継承されます。

構文 $h->{ShowErrorStatement} = $bool ; $bool = $h->{ShowErrorStatement} ;

設定値 $bool : エラーの原因となったSQL文を埋め込ませる場合、trueを指定してください。 エラーの原因となったSQL文を埋め込ませない場合、falseを指定してください。

戻り値 エラーの原因となったSQL文を埋め込ませる場合、trueが返却されます。 エラーの原因となったSQL文を埋め込ませない場合、falseが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******" ) or die "$DBI:: errstr¥n" ; printf "ShowErrorStatement : %s¥n", $dbh->{ShowErrorStatement} ? "true" : "false" ; $dbh->do( "INSERT -- ILLEGAL" ) ; $sth = $dbh->prepare( "SELECT --- ILLEGAL " ) ; $dbh->{ShowErrorStatement} = 1 ; printf "ShowErrorStatement : %s¥n", $dbh->{ShowErrorStatement} ? "true" : "false" ; $dbh->do( "INSERT -- ILLEGAL" ) ; $sth = $dbh->prepare( "SELECT --- ILLEGAL " ) ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.7.5 TraceLevel

説明 TraceLevelは、トレースレベルを設定または参照します。

Page 63: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

52

TraceLevelは設定可能です。 TraceLevelは親ハンドルから作成された子ハンドルに継承されます。

構文 $h->{TraceLevel} = $level ; $level = $h->{TraceLevel} ;

設定値 $level : トレースレベルを指定してください。

戻り値 トレースレベルが返却されます。

例 “4.3.5 trace”の“例”を参照してください。

4.7.6 FetchHashKeyName

説明 FetchHashKeyNameは、selectrow_hashref、selectall_hashref、 fetchrow_hashref、fetchall_hashrefで、連想配列の要素名となる列名を大文字とするか小文字とするかを設定または参照します。 FetchHashKeyNameのデフォルトは“NAME”です。 FetchHashKeyNameは設定可能です。 FetchHashKeyNameは親ハンドルから作成された子ハンドルに継承されます。 マルチバイトの考慮が足りません。"NAME_uc"を指定すると列名の大文字への変換が発生し、マルチバイト文字列の途中のバイトを小文字とみなして大文字に変換することがあります。また、"NAME_lc"を指定すると列名の小文字への変換が発生し、マルチバイト文字列の途中のバイトを大文字とみなして小文字に変換することがあります。マルチバイト文字列の詳細は、“6.3 マルチバイト文字列の注意”を参照してください。

構文 $h->{FetchHashKeyName} = $name ; $name = $h->{FetchHashKeyName} ;

設定値 $name : 列名を大文字とする場合、"NAME"または"NAME_uc"を指定してください。 列名を小文字とする場合、"NAME_lc"を指定してください。

戻り値 列名を大文字とする場合、"NAME"または"NAME_uc"が返却されます。 列名を小文字とする場合、"NAME_lc"が返却されます。

Page 64: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.7 すべてのハンドルに共通の属性

53

例 “4.8.6 selectall_hashref”の“例”と“4.10.8 fetchall_hashref”の“例”を参照してください。

4.7.7 Kids

説明 Kidsは、ドライバハンドルから作成したデータベースハンドルの数を返却します。またはデータベースハンドルから作成したステートメントハンドルの数を返却します。 Kidsは参照のみ可能です。

構文 $rc = $h->{Kids} ;

戻り値 データベースハンドルの数を返却、または、ステートメントハンドルの数が返却されます。

例 “4.3.2 connect_cached”の“例”を参照してください。

4.7.8 ActiveKids

説明 ActiveKidsは、ドライバハンドルから作成した活性状態のデータベースハンドルの数を返却します。またはデータベースハンドルから作成した活性状態のステートメントハンドルの数を返却します。 ActiveKidsは参照のみ可能です。

構文 $rc = $h->{ActiveKids} ;

戻り値 活性状態のデータベースハンドルの数を返却または活性状態のステートメントハンドルの数が返却されます。

例 “4.3.2 connect_cached”の“例”を参照してください。

4.7.9 CachedKids

説明 CachedKidsは、ドライバハンドルからconnect_cachedで作成したデータベースハンドルの連想配列への参照を返却します。またはデータベースハンドルか

Page 65: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

54

らprepare_cachedで作成したステートメントハンドルへの参照を返却します。 CachedKidsは参照のみ可能です。

構文 $hash_h = $h->{CachedKids} ;

戻り値 データベースハンドルの連想配列への参照を返却またはステートメントハンドルへの参照が返却されます。

例 “4.3.2 connect_cached”の“例”を参照してください。

4.7.10 CompatMode

説明 CompatModeは未サポートです。 CompatModeを使用したときの動作は不定です。

4.7.11 InactiveDestroy

説明 InactiveDestroyは未サポートです。 InactiveDestroyを使用したときの動作は不定です。

4.7.12 PrintError

説明 PrintErrorは、エラーが発生したとき、強制的に警告を発行させるか否かを参照または設定します。 PrintErrorのデフォルトは強制的に警告を発行させます。 PrintErrorは設定可能です。 PrintErrorは親ハンドルから作成された子ハンドルに継承されます。

構文 $h->{PrintError} = $bool ; $bool = $h->{PrintError} ;

設定値 $bool : 強制的に警告を発行させる場合、trueを指定してください。 強制的に警告を発行させない場合、falseを指定してください。

Page 66: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.7 すべてのハンドルに共通の属性

55

戻り値 強制的に警告を発行させる場合、trueが返却されます。 強制的に警告を発行させない場合、falseが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******" ) or die "$DBI::errstr¥n" ; printf "PrintError : %s¥n", $dbh->{PrintError} ? "true" : "false" ; $dbh->{PrintError} = 0 ; printf "PrintError : %s¥n", $dbh->{PrintError} ? "true" : "false" ; $dbh->do( "CREATE TABLE -- ILLEGAL" ) ; $dbh->do( "INSERT -- ILLEGAL" ) ; $dbh->{PrintError} = 1 ; printf "PrintError : %s¥n", $dbh->{PrintError} ? "true" : "false" ; $sth2 = $dbh->prepare( "SELECT -- ILLEGAL" ) ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.7.13 RaiseError

説明 RaiseErrorは、エラーが発生したとき、強制的に例外を発行させます。 RaiseErrorのデフォルトは強制的に例外を発行させません。 RaiseErrorは設定可能です。 RaiseErrorは親ハンドルから作成された子ハンドルに継承されます。

構文 $h->{RaiseError} = $bool ; $bool = $h->{RaiseError} ;

設定値 $bool : 強制的に例外を発行させる場合、trueを指定してください。 強制的に例外を発行させない場合、falseを指定してください。

戻り値 強制的に例外を発行させる場合、trueが返却されます。 強制的に例外を発行させない場合、falseが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******" ) or die "$DBI::errstr¥n" ; printf "RaiseError : %s¥n", $dbh->{RaiseError} ? "true" : "false" ; $dbh->do( "CREATE TABLE -- ILLEGAL" ) ; $dbh->do( "INSERT -- ILLEGAL" ) ; $dbh->{RaiseError} = 1 ; printf "RaiseError : %s¥n", $dbh->{RaiseError} ? "true" : "false" ;

Page 67: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

56

$sth2 = $dbh->prepare( "SELECT -- ILLEGAL" ) ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.7.14 ChopBlanks

説明 ChopBlanksは、文字列型からフェッチするデータの末尾の空白を除去させるか否かを設定または参照します。 ChopBlanksのデフォルトは末尾の空白は除去させません。 ChopBlanksは設定可能です。 ChopBlanksは親ハンドルから作成された子ハンドルに継承されます。

構文 $h->{ChopBlanks} = $bool ; $bool = $h->{ChopBlanks} ;

設定値 $bool : データの末尾の空白を除去させる場合、trueを指定してください。 データの末尾の空白を除去させない場合、falseを指定してください。

戻り値 データの末尾の空白を除去させる場合、trueが返却されます。 データの末尾の空白を除去させない場合、falseが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; printf "ChopBlanks : %s¥n", $dbh->{ChopBlanks} ? "true" : "false" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->{ChopBlanks} = 1 ; printf "ChopBlanks : %s¥n", $dbh->{ChopBlanks} ? "true" : "false" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) ; $sth->execute ; while( @array = $sth->fetchrow_array ) {

Page 68: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.7 すべてのハンドルに共通の属性

57

printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.7.15 LongReadLen

説明 LongReadLenは、32Kバイトを超えて2GバイトまでのBLOB型からフェッチするデータ長(バイト数)を設定または参照します。 LongReadLenのデフォルトは80です。 LongReadLenは、設定可能です。 LongReadLenは親ハンドルから作成された子ハンドルに継承されます。

構文 $h->{LongReadLen} = $max_len ; $max_len = $h->{LongReadLen} ;

設定値 $max_len : フェッチするデータ長を指定してください。

戻り値 フェッチするデータ長が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.SLIP CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.SLIP ( ORDER_NUMBER INTEGER, ORDER_SLIP BLOB(64K) ) ON DBSP1" ) or die "$DBI::errstr¥n" ; @values = ( 140, "<?xml version='1.0' ?><SLIP><NUMBER>130</NUMBER><NAME> cassette deck</NAME></SLIP>" ) ; $dbh->do( "INSERT INTO STOCKS.SLIP VALUES( ?, ? )", undef, @values ) or die "$DBI::errstr¥n" ; @values = ( 110, "<?xml version='1.0' ?><SLIP><NUMBER>110</NUMBER><NAME>television</NAME></SLIP>" ) ; $dbh->do( "INSERT INTO STOCKS.SLIP VALUES( ?, ? )", undef, @values ) or die "$DBI::errstr¥n" ; printf "%d¥n", $dbh->{LongReadLen} ; $dbh->{LongReadLen} = 10 ; printf "LongTruncOk : %s¥n", $dbh->{LongTruncOk} ? "true" : "false" ; printf "LongReadLen : %d¥n", $dbh->{LongReadLen} ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.SLIP" ) ; $sth->execute ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; }

Page 69: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

58

printf "%s¥n", $DBI::errstr ; # long truncate $dbh->{LongTruncOk} = 1 ; printf "LongTruncOk : %s¥n", $dbh->{LongTruncOk} ? "true" : "false" ; printf "LongReadLen : %d¥n", $dbh->{LongReadLen} ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.SLIP" ) ; $sth->execute ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.7.16 LongTruncOk

説明 LongTruncOkは、LongReadLenの長さより32Kバイトを超えて2GバイトまでのBLOB型からフェッチするデータが長いときにエラーにする否かを設定または参照します。 LongTruncOkのデフォルトは、LongReadLenで指定した長さより長いときにエラーにします。 LongTruncOkは設定可能です。 LongTruncOkは親ハンドルから作成された子ハンドルに継承されます。

構文 $h->{LongTruncOk} = $bool ; $bool = $h->{LongTruncOk} ;

設定値 $bool : LongReadLenの長さよりフェッチするデータが長いときにエラーにする場合、falseを指定してください。 LongReadLenの長さよりフェッチするデータが長いときにエラーにしない場合、trueを指定してください。

戻り値 LongReadLenの長さよりフェッチするデータが長いときにエラーにする場合、falseが返却されます。 LongReadLenの長さよりフェッチするデータが長いときにエラーにしない場合、trueが返却されます。

例 “4.7.15 LongReadLen”の“例”を参照してください。

Page 70: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.7 すべてのハンドルに共通の属性

59

4.7.17 Taint

説明 Taintは未サポートです。 Taintを使用したときの動作は不定です。

4.7.18 private_*

説明 private_で始まる名前の属性は未サポートです。 private_で始まる名前の属性を使用したときの動作は不定です。

Page 71: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

60

4.8 データベースハンドルメソッド

データベースハンドルメソッドについて説明します。

4.8.1 do

説明 doは、SQL文を準備し、実行します。

構文 $rc = $dbh->do( $statement ) ; $rc = $dbh->do( $statement, ¥%set_attr ) ; $rc = $dbh->do( $statement, ¥%set_attr, @bind_values ) ;

パラメタ $statement : 動的SELECT文以外のSQL文を指定してください。 ¥%set_attr : 現在は、指定したときの動作は不定です。 @bind_values : 動的パラメタに対応する値の配列を指定してください。

戻り値 SQL文がINSERT文、UPDATE文:探索、UPDATE文:位置付け、DELETE文:探索DELETE文:位置付けの場合、更新件数が返却されます。 SQL文がINSERT文、UPDATE文:探索、UPDATE文:位置付け、DELETE文:探索DELETE文:位置付け以外の場合、0E0が返却されます。 異常の場合、undefが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $rc = $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; printf "%d¥n", $rc ; $rc = $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ; printf "rc : $rc¥n" ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } @values = ( 140, "cassette deck", 120, 2 ) ; $rc = $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( ?, ?, ?, ? )", undef , @values ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ;

Page 72: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

61

} @values = ( 110, "television", 85, 2 ) ; $rc = $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( ?, ?, ?, ? )", undef , @values ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) ; $sth->execute ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $rc = $dbh->do( "DELETE FROM STOCKS.STOCK" ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $rc = $dbh->do( "DELETE FROM STOCKS.STOCK" ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { printf "no record¥n" ; } $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.2 selectrow_array

説明 selectrow_arrayは、SQL文を準備、実行および先頭行をフェッチし、先頭行の値の配列を返却します。 フェッチしたデータがNULL値の場合、配列の値はundefとなります。 内部的にprepare、execute、selectrow_arrayrefを使用します。

構文 @array = $dbh->selectrow_array( $statement ) ; @array = $dbh->selectrow_array( $statement, ¥%set_attr ) ; @array = $dbh->selectrow_array( $statement, ¥%set_attr, @bind_values ) ;

パラメタ $statement : 動的SELECT文を指定してください。 ¥%set_attr : 現在は、指定したときの動作は不定です。 @bind_values : 動的パラメタに対応する値の配列を指定してください。

Page 73: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

62

戻り値 値の配列が返却されます。 行がない場合または異常の場合、要素数が0個の配列が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or die "$DBI::errstr¥n" ; @values = ( 'cassette deck', 'television' ) ; @array = $dbh->selectrow_array( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NAME IN ( ?, ? ) OR STOCK_QUANTITY IS NULL ORDER BY PRODUCT_NUMBER DESC", undef, @values ) ; foreach $value ( @array ) { printf ! defined $value ? "undef¥n" : "$value¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.3 selectrow_arrayref

説明 selectrow_arrayrefは、SQL文を準備、実行、先頭行をフェッチし、先頭行の値の配列への参照を返却します。 フェッチしたデータがNULL値の場合、配列の値はundefとなります。 内部的にprepare、execute、fetchrow_arrayrefを使用します。

構文 $array_ref = $dbh->selectrow_arrayref( $statement ) ; $array_ref = $dbh->selectrow_arrayref( $statement, ¥%set_attr ) ; $array_ref = $dbh->selectrow_arrayref( $statement, ¥%set_attr, @bind_values ) ;

パラメタ $statement : 動的SELECT文を指定してください。 ¥%set_attr :

Page 74: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

63

現在は、指定したときの動作は不定です。 @bind_values : 動的パラメタに対応する値の配列を指定してください。

戻り値 値の配列への参照が返却されます。 行がない場合または異常の場合、undefが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT _NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or die "$DBI::errstr¥n" ; @values = ( "cassette deck", "television" ) ; $array_ref = $dbh->selectrow_arrayref( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT _NAME IN ( ?, ? ) OR STOCK_QUANTITY IS NULL ORDER BY PRODUCT_NAME DESC", undef, @values ) ; foreach $value ( @$array_ref ) { printf ! defined $value ? "undef¥n" : "$value¥n" ; } $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.4 selectrow_hashref

説明 selectrow_hashrefは、SQL文を準備、実行、先頭行をフェッチし、先頭行の値を列名で対応付けた連想配列の参照を返却します。 フェッチしたデータがNULL値の場合、連想配列の値はundefとなります。 内部的にprepare、execute、fetchrow_hashrefを使用します。

構文 $hash_ref = $dbh->selectrow_hashref ( $statement ) ; $hash_ref = $dbh->selectrow_hashref( $statement, ¥%set_attr ) ; $hash_ref = $dbh->selectrow_hashref( $statement, ¥%set_attr, @bind_values ) ;

パラメタ $statement : 動的SELECT文を指定してください。

Page 75: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

64

¥%set_attr : 現在は、指定したときの動作は不定です。 @bind_values : 動的パラメタに対応する値の配列を指定してください。

戻り値 値を列名で対応付けた連想配列の参照が返却されます。 行がない場合または異常の場合、undefが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or die "$DBI::errstr¥n" ; @values = ( 'cassette deck', 'television' ) ; $hash_ref = $dbh->selectrow_hashref( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NAME IN ( ?, ? ) OR STOCK_QUANTITY IS NULL ORDER BY PRODUCT_NUMBER DESC", undef, @values ) ; printf "$hash_ref->{PRODUCT_NAME}¥n" ; printf ! defined $hash_ref->{STOCK_QUANTITY} ? "undef¥n" : "$hash_ref-> {STOCK_QUANTITY}¥n" ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.5 selectall_arrayref

説明 selectall_arrayrefは、SQL文を準備、実行およびすべての行をフェッチし、すべての行の値の配列への参照の配列への参照を返却します。 フェッチしたデータがNULL値の場合、配列の値はundefとなります。 内部的にprepare、execute、fetchall_arrayrefを使用します。

構文 $array_ref = $dbh->selectall_arrayref( $statement ) ; $array_ref = $dbh->selectall_arrayref( $statement, ¥%set_attr ) ; $array_ref = $dbh->selectall_arrayref( $statement, ¥%set_attr, @bind_values ) ;

パラメタ $statement :

Page 76: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

65

動的SELECT文を指定してください。または、動的SELECT文のステートメントハンドルを指定してください。 ¥%set_attr : 連想配列で最大検索件数を指定してください。 連想配列の指定方法:{MaxRows => 最大検索件数} @bind_values : 動的パラメタに対応する値の配列を指定してください。

戻り値 値の配列への参照の配列への参照を返却します。 行がない場合または異常の場合、要素数が0個の配列への参照が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or die "$DBI::errstr¥n" ; $array_ref = $dbh->selectall_arrayref( "SELECT * FROM STOCKS.STOCK" ) ; foreach $array ( @$array_ref ) { foreach $value ( @$array ) { printf ! defined $value ? "undef¥n" : "$value¥n" ; } } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.6 selectall_hashref

説明 selectall_hashrefは、SQL文を準備、実行およびすべての行をフェッチし、すべての行の値を列名で対応付けた連想配列への参照を列の値で対応付けた連想配列への参照を返却します。 フェッチしたデータがNULL値の場合、連想配列の値はundefとなります。 内部的にprepare、execute、fetchall_hashrefを使用します。

構文 $hash_ref = $dbh->selectall_hashref( $statement,

Page 77: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

66

$column_name_or_number ) ; $hash_ref = $dbh->selectall_hashref( $statement, $column_name_or_number, ¥%set_attr ) ; $hash_ref = $dbh->selectall_hashref( $statement, $column_name_or_number, ¥%set_attr, @bind_values ) ;

パラメタ $statement : 動的SELECT文または動的SELECT文のステートメントハンドルを指定してください。 $column_name_or_number : 列名または1以上の数値で列の位置を指定してください。 ¥%set_attr : 現在は、指定したときの動作は不定です。 @bind_values : 動的パラメタに対応する値の配列を指定してください。

戻り値 値を列名で対応付けた連想配列への参照の連想配列への参照が返却されます。 行がない場合または異常の場合、要素数が0個の連想配列への参照が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or die "$DBI::errstr¥n" ; printf "%s¥n", $dbh->{FetchHashKeyName} ; $dbh->{FetchHashKeyName} = "NAME_lc" ; printf "%s¥n", $dbh->{FetchHashKeyName} ; $hash_ref = $dbh->selectall_hashref( "SELECT * FROM STOCKS.STOCK", "product_number" ) ; @keys = keys( %$hash_ref ) ; foreach $key ( @keys ) { printf "$hash_ref->{$key}->{product_number}¥n" ; printf ! defined $hash_ref->{$key}->{stock_quantity} ? "undef¥n" : "$hash_ref->{$key}->{stock_quantity}¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

Page 78: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

67

4.8.7 selectcol_arrayref

説明 selectcol_arrayrefは、SQL文を準備、実行およびすべての行をフェッチし、先頭列のすべての行の値の参照の配列への参照を返却します。 フェッチしたデータがNULL値の場合、配列の値はundefとなります。 内部的にprepare、execute、fetchall_arrayrefを使用します。

構文 $array_ref = $dbh->selectcol_arrayref( $statement ) ; $array_ref = $dbh->selectcol_arrayref( $statement, ¥%set_attr ) ; $array_ref = $dbh->selectcol_arrayref( $statement, ¥%set_attr, @bind_values ) ;

パラメタ $statement : 動的SELECT文または動的SELECT文のステートメントハンドルを指定してください。 ¥%set_attr : 現在は、指定したときの動作は不定です。 @bind_values : 動的パラメタに対応する値の配列を指定してください。

戻り値 値の参照の配列への参照が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******" , { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or die "$DBI::errstr¥n" ; $array_ref = $dbh->selectcol_arrayref( "SELECT STOCK_QUANTITY FROM STOCKS.STOCK" ) ; foreach $value ( @$array_ref ) { printf ! defined $value ? "undef¥n" : "$value¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

Page 79: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

68

4.8.8 prepare

説明 prepareは、SQL文を準備し、ステートメントハンドルオブジェクトへの参照を返却します。

構文 $sth = $dbh->prepare( $statement ) ; $sth = $dbh->prepare( $statement, ¥%set_attr ) ;

パラメタ $statement : SQL文を指定してください。 ¥%set_attr : 現在は、指定したときの動作は不定です。

戻り値 ステートメントハンドルへの参照が返却されます。 異常の場合、undefが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "DROP TABLE STOCKS.STOCK CASCADE" ) ; if( ! defined $sth ) { die "$DBI::errstr¥n" ; } $sth->execute ; $sth = $dbh->prepare( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) ; if( ! defined $sth ) { die "$DBI::errstr¥n" ; } $sth->execute or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) ; if( ! defined $sth ) { die "$DBI::errstr¥n" ; } $sth->execute or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) ; if( ! defined $sth ) { die "$DBI::errstr¥n" ; } $sth->execute or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) ;

Page 80: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

69

if( ! defined $sth ) { die "$DBI::errstr¥n" ; } $sth->execute ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.9 prepare_cached

説明 prepare_cachedは、SQL文を準備し、データベースハンドル内でパラメタの値でステートメントハンドルオブジェクトを連想配列に格納し、ステートメントハンドルオブジェクトへの参照を返却します。 同じパラメタでprepare_cachedを呼び出した場合、前回のステートメントが有効であれば、ステートメントを再使用します。

構文 $sth = $dbh->prepare_cached( $statement ) ; $sth = $dbh->prepare_cached( $statement, ¥%set_attr ) ; $sth = $dbh->prepare_cached( $statement, ¥%set_attr, $allow_active ) ;

パラメタ $statement : SQL文を指定してください。 ¥%set_attr : 現在は、指定したときの動作は不定です。 $allow_active : ステートメントハンドルが活性状態のときに警告を発生させる場合、falseを指定してください。 ステートメントハンドルが活性状態のときに警告を発生させない場合、trueを指定してください。

戻り値 ステートメントハンドルへの参照が返却されます。 異常の場合、undefが返却されます。

例 “4.3.2 connect_cached”の“例”を参照してください。

Page 81: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

70

4.8.10 commit

説明 commitは、AutoCommitがfalseの場合、データベースをコミットし、復帰値を返却します。 commitは、AutoCommitがfalseの場合のみ使用することができます。

構文 $rc = $dbh->commit ;

戻り値 trueが返却されます。 異常の場合、falseが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; printf "AutoCommit : %s¥n", $dbh->{AutoCommit} ? "true" : "false" ; $dbh->{AutoCommit} = 0 ; printf "AutoCommit : %s¥n", $dbh->{AutoCommit} ? "true" : "false" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $rc = $dbh->commit ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $rc = $dbh->rollback ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $dbh->{AutoCommit} = 1 ; printf "AutoCommit : %s¥n", $dbh->{AutoCommit} ? "true" : "false" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

Page 82: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

71

4.8.11 rollback

説明 rollbackは、データベースをロールバックし、復帰値を返却します。 rollbackは、AutoCommitがfalseの場合のみ使用することができます。

構文 $rc = $dbh->rollback ;

戻り値 trueが返却されます。 異常の場合、falseが返却されます。

例 “4.8.10 commit”の“例”を参照してください。

4.8.12 disconnect

説明 disconnectは、データベースを切断し、復帰値を返却します。 AutoCommitがfalseの場合、disconnectの呼び出し前に、commitまたはrollbackを呼び出しておく必要があります。 活性状態のステートメントハンドルは、disconnectの呼び出し前に、finishを呼び出しておく必要があります。

構文 $rc = $dbh->disconnect ;

戻り値 trueが返却されます。 異常の場合、falseが返却されます。

例 “4.3.1 connect”の“例”を参照してください。

4.8.13 ping

説明 pingは、データベースが動作しているかどうかを判定し、判定結果を返却します。

構文 $rc = $dbh->ping ;

戻り値 データベースが動作している場合、0以外が返却されます。

Page 83: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

72

データベースが動作していない場合、0が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; printf "ping : %d¥n", $dbh->ping ; $dbh->disconnect or die "$DBI::errstr¥n" ; printf "ping : %d¥n", $dbh->ping ;

4.8.14 get_info

説明 get_infoは未サポートです。 get_infoを使用したときの動作は不定です。

4.8.15 table_info

説明 table_infoは、データベース中に存在するユーザが作成した表、ビュー表および一時表に関する情報を得るためのステートメントハンドルへの参照を返却します。

構文 $sth = $dbh->table_info ; $sth = $dbh->table_info( ¥%in_attr ) ; $sth = $dbh->table_info( $database_name, $schema_name, $table_name, $type ) ; $sth = $dbh->table_info( $database_name, $schema_name, $table_name, $type, ¥%set_attr ) ;

パラメタ ¥%in_attr : 連想配列を用いてデータベース名、スキーマ名、表名、表の形式の文字列を指定する方法ですが、古い記述方法であるため推奨されていません。そのため、説明を割愛します。 $database_name : データベース名を指定してください。 データベース名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。 $schema_name : スキーマ名を指定してください。 スキーマ名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。

Page 84: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

73

$table_name : 表名、ビュー表または一時表名のいずれかを指定してください。 表名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。 $type : 表の形式の文字列を指定してください。文字列と意味を以下に示します。

値 意味 "TABLE" 実表 "VIEW" ビュー表 "GROBAL TEMPORARY" 一時表 複数の形式を指定するときは、形式ごとに引用符でくくってコンマ区切りで連結した文字列を指定してください。 ¥%set_attr : 現在は、指定したときの動作は不定です。

戻り値 ステートメントハンドルへの参照が返却されます。ステートメントハンドルをフェッチすることにより、表、ビュー表および一時表に関する情報を得ることができます。データベース情報の連想配列の名前と値を以下に示します。 連想配列の名前 値

TABLE_CAT データベース名が設定されます。 TABLE_SCHEM スキーマ名が設定されます。 TABLE_NAME 表名、ビュー表名または一時表名が設定されます。 TABLE_TYPE 表の場合、"TABLE"が設定されます。

ビュー表の場合、"VIEW"が設定されます。 一時表の場合、"GLOBAL TEMPORARY"が設定されます。

REMARKS undefが設定されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "DROP TABLE STOCKS.STOCK_T CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) COMMENT 'TABLE' ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "CREATE VIEW STOCKS.STOCK_V COMMENT 'VIEW' AS SELECT PRODUCT_NUMBER, PRODUCT_NAME FROM STOCKS.STOCK WHERE PRODUCT_NAME = 'cassette deck'" ) or die "$DBI::errstr¥n" ; $dbh->do( "CREATE GLOBAL TEMPORARY TABLE STOCKS.STOCK_T ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON COMMIT PRESERVE ROWS COMMENT 'VIEW' ON DBSP1 2" ) or die "$DBI::errstr¥n" ; $sth = $dbh->table_info( "RDBDB", "STOCKS", "STOCK%", "'TABLE','VIEW'" ) ; $c = 0 ; while( $hash_ref = $sth->fetchrow_hashref ) { $c ++ ; printf "(%d)¥n", $c ;

Page 85: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

74

printf "TABLE_CAT : %s¥n", $hash_ref->{TABLE_CAT} ; printf "TABLE_SCHEM : %s¥n", $hash_ref->{TABLE_SCHEM} ; printf "TABLE_NAME : %s¥n", $hash_ref->{TABLE_NAME} ; printf "TABLE_TYPE : %s¥n", $hash_ref->{TABLE_TYPE} ; printf "REMARKS : %s¥n", ! defined $hash_ref->{REMARKS} ? "undef" : $hash_ref->{REMARKS} ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.16 tables

説明 tablesは、データベース中に存在するユーザが作成した表名、ビュー表名および一時表名の配列を返却します。

構文 @tables = $dbh->tables ; @tables = $dbh->tables( ¥%in_attr ) ; @tables = $dbh->tables( $database_name, $schema_name, $table_name, $type ) ;

パラメタ ¥%in_attr : 連想配列を用いてデータベース名、スキーマ名、表名、表の形式の文字列を指定する方法ですが、古い記述方法であるため推奨されていません。そのため、説明を割愛します。 $database_name : データベース名を指定してください。 データベース名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。 $schema_name : スキーマ名を指定してください。 スキーマ名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。 $table_name : 表名、ビュー表または一時表名のいずれかを指定してください。 表名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。 $type : 表の形式の文字列を指定してください。文字列と意味を以下に示します。

値 意味 "TABLE" 実表 "VIEW" ビュー表

Page 86: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

75

値 意味 "GROBAL TEMPORARY“ 一時表 複数の形式を指定するときは、形式ごとに引用符でくくってコンマ区切りで連結した文字列を指定してください。

戻り値 表名の配列が返却されます。 表名は"データベース名"."スキーマ名"."表名"となります。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "DROP TABLE STOCKS.STOCK_T CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) COMMENT 'TABLE' ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "CREATE VIEW STOCKS.STOCK_V COMMENT 'VIEW' AS SELECT PRODUCT_NUMBER, PRODUCT_NAME FROM STOCKS.STOCK WHERE PRODUCT_NAME = 'cassette deck'" ) or die "$DBI::errstr¥n" ; $dbh->do( "CREATE GLOBAL TEMPORARY TABLE STOCKS.STOCK_T ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON COMMIT PRESERVE ROWS COMMENT 'VIEW' ON DBSP1 2" ) or die "$DBI::errstr¥n" ; @tables = $dbh->tables( "RDBDB", "STOCKS", "STOCK%", "'TABLE','VIEW'" ) ; foreach $table ( @tables ) { printf "table : %s¥n", $table ; } $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.17 column_info

説明 column_infoは、データベース中に存在するユーザが作成した表、ビュー表、一時表の列に関する情報を得るためのステートメントハンドルへの参照を返却します。

構文 $sth = $dbh->column_info( $database_name, $schema_name, $table_name, $column_name ) ;

パラメタ $database_name : データベース名を指定してください。 データベース名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。 $schema_name :

Page 87: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

76

スキーマ名を指定してください。 スキーマ名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。 $table_name : 表名またはビュー表または一時表名を指定してください。 表名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。 $column_name : 列名を指定してください。 列名に検索パターン文字を指定することができます。0個以上の文字に合致させる場合は"%"を指定してください。

戻り値 ステートメントハンドルへの参照が返却されます。ステートメントハンドルをフェッチすることにより、列に関する情報を得ることができます。データベース情報の連想配列の名前と値を以下に示します。 連想配列の名前 値

TABLE_CAT データベース名が設定されます。 TABLE_SCHEM スキーマ名が設定されます。 TABLE_NAME 表名、ビュー表名、一時表名が設定されます。 COLUMN_NAME 列名が設定されます。 DATA_TYPE SQLデータ型番号が設定されます。 TYPE_NAME データ型を表す文字列が設定されます。 COLUMN_SIZE 真数の場合、10進数での桁数が設定されます。

概数の場合、ビット数が設定されます。 文字列型、各国語文字列型の場合、最大文字数が設定されます。 日時型の場合、最大文字数が設定されます。 時間隔型の場合、最大文字数が設定されます。 BLOB型の場合、最大バイト数が設定されます。

LENGTH データ長が設定されます。 SCALE 位取りが設定されます。 NUM_PREC_RADIX 真数の場合、10が設定されます。

概数の場合、2が設定されます。 真数、概数以外の場合、undefが設定されます。

NULLABLE NULLを持つ可能性がある場合、trueが設定されます。 NULLを持つ可能性がない場合、falseが設定されます。

REMARKS NULLが設定されます。 COLUMN_DEF 列にデフォルト値が設定されている場合、デフォルト値

が設定されます。 列にデフォルト値が設定されていない場合、undefが設定されます。

SQL_DATA_TYPE 日時型の場合、9が設定されます。 時間隔型の場合、10が設定されます。 日時型、時間隔型以外の場合、SQLデータ型番号が設定されます。

SQL_DATETIME_SUB DATE型の場合、1が設定されます。

Page 88: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

77

連想配列の名前 値 TIME型の場合、2が設定されます。 TIMESTAMP型の場合、3が設定されます。 日時型、時間隔型以外の場合、undefが設定されます。

CHAR_OCTET_LENGTH 文字型の場合、文字数が設定されます。 文字列型以外の場合、undefが設定されます。

ORDINAL_POSITION 列番号が設定されます。 IS_NULLABLE NULLを持つ可能性がある場合、"YES"が設定されます。

NULLを持つ可能性がない場合、"NO"が設定されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "DROP TABLE STOCKS.STOCK_T CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) COMMENT 'TABLE' ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "CREATE VIEW STOCKS.STOCK_V COMMENT 'VIEW' AS SELECT PRODUCT_NUMBER, PRODUCT_NAME FROM STOCKS.STOCK WHERE PRODUCT_NAME = 'cassette deck'" ) or die "$DBI::errstr¥n" ; $dbh->do( "CREATE GLOBAL TEMPORARY TABLE STOCKS.STOCK_T ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON COMMIT PRESERVE ROWS COMMENT 'VIEW' ON DBSP1 2" ) or die "$DBI::errstr¥n" ; $sth = $dbh->column_info( "RDBDB", "STOCKS", "STOCK%", "PRODUCT%" ) ; $c = 0 ; while( $hash_ref = $sth->fetchrow_hashref ) { $c ++ ; printf "(%d)¥n", $c ; printf "TABLE_CAT : %s¥n", $hash_ref->{TABLE_CAT} ; printf "TABLE_SCHEM : %s¥n", $hash_ref->{TABLE_SCHEM} ; printf "TABLE_NAME : %s¥n", $hash_ref->{TABLE_NAME} ; printf "COLUMN_NAME : %s¥n", $hash_ref->{COLUMN_NAME} ; printf "DATA_TYPE : %d¥n", $hash_ref->{DATA_TYPE} ; printf "TYPE_NAME : %s¥n", $hash_ref->{TYPE_NAME} ; printf "COLUNN_SIZE : %d¥n", $hash_ref->{COLUMN_SIZE} ; printf "LENGTH : %d¥n", $hash_ref->{LENGTH} ; printf "SCALE : %d¥n", $hash_ref->{TYPE_NAME} ; printf "NUM_PREC_RADIX : " . ( ! defined $hash_ref->{NUM_PREC_RADIX} ? "%s¥n" : "%d¥n" ), ! defined $hash_ref->{NUM_PREC_RADIX} ? "undef" : $hash_ref->{NUM_PREC_RADIX} ; printf "NULLABLE : %s¥n", $hash_ref->{NULLABLE} ; printf "REMARKS : %s¥n", ! defined $hash_ref->{REMARKS} ? "undef" : $hash_ref->{REMARKS} ; printf "COLUMN_DEF : %s¥n", ! defined $hash_ref->{COLUMN_DEF} ? "undef" : $hash_ref->{COLUMN_DEF} ; printf "SQL_DATA_TYPE : %d¥n", $hash_ref->{SQL_DATA_TYPE} ; printf "SQL_DATETIME_SUB : " . ( ! $hash_ref->{SQL_DATETIME_SUB} ? "%s¥n" : "%d¥n" ) , ! defined $hash_ref->{SQL_DATETIME_SUB} ? "undef" : $hash_ref->{SQL_DATETIME_SUB} ; printf "CHAR_OCTET_LENGTH : " . ( ! $hash_ref->{CHAR_OCTET_LENGTH} ? "%s¥n" :

Page 89: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

78

"%d¥n" ) , ! defined $hash_ref->{CHAR_OCTET_LENGTH} ? "undef" : $hash_ref->{CHAR_OCTET_LENGTH} ; printf "ORDINAL_POSITION : %d¥n", $hash_ref->{ORDINAL_POSITION} ; printf "IS_NULLABLE : %s¥n", $hash_ref->{IS_NULLABLE} ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.18 primary_key_info

説明 primary_key_infoは、データベース中に存在するユーザが作成した表、一時表の一意性制約定義に関する情報を得るためのステートメントハンドルへの参照を返却します。

構文 $sth = $dbh->primary_key_info( $database_name, $schema_name, $table_name, ¥%set_attr ) ;

パラメタ $database_name : データベース名を指定してください。 $schema_name : スキーマ名を指定してください。 $table_name : 表名、ビュー表または一時表名を指定してください。 ¥%set_attr : 現在は、指定したときの動作は不定です。

戻り値 ステートメントハンドルへの参照が返却されます。ステートメントハンドルをフェッチすることにより、一意性制約定義に関する情報を得ることができます。データベース情報の連想配列の名前と値を以下に示します。 連想配列の名前 値 TABLE_CAT データベース名が設定されます。 TABLE_SCHEM スキーマ名が設定されます。 TABLE_NAME 表名、ビュー表または一時表名が設定されます。 KEY_SEQ 列番号が返却されます。 PK_NAME 空文字列が設定されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ;

Page 90: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

79

$dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL, PRIMARY KEY(PRODUCT_NUMBER) ) COMMENT 'TABLE' ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "CREATE INDEX STOCKS.STOCK.NUM_IX KEY(PRODUCT_NUMBER) ON DBSP1" ) or die "$DBI::errstr¥n" ; $sth = $dbh->primary_key_info( "RDBDB", "STOCKS", "STOCK" ) ; $c = 0 ; while( $hash_ref = $sth->fetchrow_hashref ) { $c ++ ; printf "(%d)¥n", $c ; printf "TABLE_CAT : %s¥n", $hash_ref->{TABLE_CAT} ; printf "TABLE_SCHEM : %s¥n", $hash_ref->{TABLE_SCHEM} ; printf "TABLE_NAME : %s¥n", $hash_ref->{TABLE_NAME} ; printf "COLUMN_NAME : %s¥n", $hash_ref->{COLUMN_NAME} ; printf "KEY_SEQ : %d¥n", $hash_ref->{KEY_SEQ} ; printf "PK_NAME : %s¥n", ! defined $hash_ref->{PK_NAME} ? "undef" : $hash_ref->{PK_NAME} ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.19 primary_key

説明 primary_keyは、データベース中に存在するユーザが作成した表、一時表の一意性制約の列名の配列を返却します。

構文 @columns = $dbh->primary_key( $database_name, $schema_name, $table_name ) ;

パラメタ $database_name : データベース名を指定してください。 $schema_name : スキーマ名を指定してください。 $table_name : 表名または一時表名を指定してください。

戻り値 列名の配列が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ;

Page 91: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

80

$dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL, PRIMARY KEY(PRODUCT_NUMBER) ) COMMENT 'TABLE' ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "CREATE INDEX STOCKS.STOCK.NUM_IX KEY(PRODUCT_NUMBER) ON DBSP1" ) or die "$DBI::errstr¥n" ; @columns = $dbh->primary_key( "RDBDB", "STOCKS", "STOCK" ) ; foreach $column ( @columns ) { printf "column : %s¥n", $column ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.20 foreign_key_info

説明 foreign_key_infoは未サポートです。 foreign_key_infoを使用したときの動作は不定です。

4.8.21 type_info_all

説明 type_info_allは、サポートしているデータ型の情報の配列への参照を返却します。

構文 $type_info_all = $dbh->type_info_all ;

戻り値 データ型の情報の配列への参照が返却されます。 配列の1要素目は、列の情報の保持順を示す連想配列への参照となります。列の情報の保持順を示す連想配列の名前と値を以下に示します。 連想配列の名前 値

TYPE_NAME 0 DATA_TYPE 1 COLUMN_SIZE 2 LITERAL_PREFIX 3 LITERAL_SUFFIX 4 CREATE_PARAMS 5 NULLABLE 6 CASE_SENSITIVE 7 SEARCHABLE 8 UNSIGNED_ATTRIBUTE 9 FIXED_PREC_SCALE 10 AUTO_UNIQUE_VALUE 11

Page 92: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

81

連想配列の名前 値 LOCAL_TYPE_NAME 12 MINIMUM_SCALE 13 MAXIMUM_SCALE 14 SQL_DATA_TYPE 15 SQL_DATETIME_SUB 16 NUM_PREC_RADIX 17 INTERVAL_PRECISION 18 配列の2要素目以降は、列の情報を保持している配列への参照の配列への参照となります。列の情報を保持している配列の要素番号と値を以下に示します。 配列の要素番号 値 0 データ型を表す文字列が設定されます。 1 SQLデータ型番号が設定されます。 2 真数の場合、10進数での桁数が設定されます。

概数の場合、ビット数が設定されます。 文字列型、各国語文字列型の場合、最大文字数が設定されます。 日時型の場合、最大文字数が設定されます。 時間隔型の場合、最大文字数が設定されます。 BLOB型の場合、最大バイト数が設定されます。

3 定数値の先頭に付ける文字列が設定されます。 定数値の先頭に付ける文字列がない場合、undefが設定されます。

4 定数値の後方に付ける文字列が設定されます。 定数値の後方に付ける文字列がない場合、undefが設定されます。

5 デ ー タ型に精度、位取りが指定できる場合、"PRECISION,SCALE"が設定されます。 データ型に長さが指定できる場合、"LENGTH"が設定されます。 データ型に精度、位取り、長さが指定できない場合、undefが設定されます。

6 常にNULLの値を持つ可能性があるため、1が設定されます。

7 文字列型の場合、比較において大文字と小文字を区別するため、trueが設定されます。 文字列型以外の場合、falseが設定されます。

8 探索条件に指定できない場合、0が設定されます。 LIKE述語を除く探索条件に指定できる場合、2が設定されます。 探索条件に指定できる場合、3が設定されます。

9 真数、概数の場合、常に符号ありのため、falseが設定されます。 真数、概数でない場合、undefが設定されます。

10 常に精度と位取りが同じではないため、falseが設定されます。

11 真数、概数以外の場合、新しい行を挿入するとき自動的にユニークな値とはならないため、falseが設定されま

Page 93: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

82

配列の要素番号 値 す。 真数、概数以外の場合、undefが設定されます。

12 Symfoware/RDBで規定されたデータ型を表す文字列が設定されます。

13 位取りの最小値が設定されます。 14 位取りの最大値が設定されます。 15 日時型の場合、9が設定されます。

時間隔型の場合、10が設定されます。 日時型、時間隔型以外の場合、SQLデータ型番号が設定されます。

16 DATE型の場合、1が設定されます。 TIME型の場合、2が設定されます。 TIMESTAMP型の場合、3が設定されます。 日時型、時間隔型以外の場合、undefが設定されます。

17 真数の場合、10が設定されます。 概数の場合、2が設定されます。 真数、概数以外の場合、undefが設定されます。

18 時間隔型の場合、時間隔先行フィールド精度の最大文字数が設定されます。 時間隔型以外の場合、undefが設定されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $type_info_all = $dbh->type_info_all ; $hash_types = $type_info_all->[ 0 ] ; @keys_types = keys( %$hash_types ) ; for( $i = 0 ; $i < @keys_types ; $i ++ ) { $keys[ $hash_types->{ $keys_types[ $i ] } ] = $keys_types[ $i ] ; } $c = 0 ; for( $i = 1 ; $i < @$type_info_all ; $i ++ ) { @type_info = $type_info_all->[ $i ] ; foreach $types ( @type_info ) { $c ++ ; printf "(%d)¥n", $c ; printf "%-18s : %s¥n", $keys[ 0], $types->[ 0] ; printf "%-18s : %d¥n", $keys[ 1], $types->[ 1] ; printf "%-18s : %s¥n", $keys[ 2], $types->[ 2] ; printf "%-18s : %s¥n", $keys[ 3], $types->[ 3] ; printf "%-18s : %s¥n", $keys[ 4], $types->[ 4] ; printf "%-18s : %s¥n", $keys[ 5], $types->[ 5] ; printf "%-18s : %d¥n", $keys[ 6], $types->[ 6] ; printf "%-18s : %s¥n", $keys[ 7], $types->[ 7] ? "true" : "false" ; printf "%-18s : %s¥n", $keys[ 8], $types->[ 8] ; printf "%-18s : %s¥n", $keys[ 9], ! defined $types->[ 9] ? "undef" : $types->[ 9] ? "true" : "false" ; printf "%-18s : %s¥n", $keys[10], ! defined $types->[10] ? "undef" : $types->[10] ? "true" : "false" ;

Page 94: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

83

printf "%-18s : %s¥n", $keys[11], ! defined $types->[11] ? "undef" : $types->[11] ? "true" : "false" ; printf "%-18s : %s¥n", $keys[12], $types->[12] ; printf "%-18s : %d¥n", $keys[13], $types->[13] ; printf "%-18s : %d¥n", $keys[14], $types->[14] ; printf "%-18s : %d¥n", $keys[15], $types->[15] ; printf "%-18s : " . ( ! defined $types->[16] ? "%s¥n" : "%d¥n" ), $keys[16], ! defined $types->[16] ? "undef" : $types->[16] ; printf "%-18s : " . ( ! defined $types->[17] ? "%s¥n" : "%d¥n" ), $keys[17], ! defined $types->[17] ? "undef" : $types->[17] ; printf "%-18s : " . ( ! defined $types->[18] ? "%s¥n" : "%d¥n" ), $keys[18], ! defined $types->[18] ? "undef" : $types->[18] ; } } $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.22 type_info

説明 type_infoは、指定したデータ型に対応するデータ型の情報を保持する連想配列への参照の配列を返却します。

構文 @type_info = $dbh->type_info( $data_type ) ;

パラメタ $data_type : undefまたはSQL_ALL_TYPESを指定した場合、すべてのデータ型の情報を保持する連想配列への参照を返却します。 データ型番号の配列への参照を指定した場合、データ型番号に一致したデータ型の情報を保持する連想配列への参照を返却します。

戻り値 データ型の情報を保持する連想配列への参照が返却されます。データ型の情報を保持する連想配列の名前と値を以下に示します。 連想配列の名前 値

TYPE_NAME データ型を表す文字列が設定されます。 DATA_TYPE SQLデータ型番号が設定されます。 COLUMN_SIZE 真数の場合、10進数での桁数が設定されます。

概数の場合、ビット数が設定されます。 文字列型、各国語文字列型の場合、最大文字数が設定されます。 日時型の場合、最大文字数が設定されます。 時間隔型の場合、最大文字数が設定されます。 BLOB型の場合、最大バイト数が設定されます。

LITERAL_PREFIX 定数値の先頭に付ける文字列が設定されます。 定数値の先頭に付ける文字列がない場合、undefが設定

Page 95: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

84

連想配列の名前 値 されます。

LITERAL_SUFFIX 定数値の後方に付ける文字列が設定されます。 定数値の後方に付ける文字列がない場合、undefが設定されます。

CREATE_PARAMS データ型に精度、位取りが指定できる場合、"PRECISION,SCALE"が設定されます。 データ型に長さが指定できる場合、"LENGTH"が設定されます。 データ型に精度、位取り、長さが指定できない場合、undefが設定されます。

NULLABLE 常にNULLの値を持つ可能性があるため、1が設定されます。

CASE_SENSITIVE 文字列型の場合、比較において大文字と小文字を区別するため、trueが設定されます。 文字列型以外の場合、falseが設定されます。

SEARCHABLE 探索条件に指定できない場合、0が設定されます。 LIKE述語を除く探索条件に指定できる場合、2が設定されます。 探索条件に指定できる場合、3が設定されます。

UNSIGNED_ATTRIBUTE 真数、概数の場合、常に符号ありのため、falseが設定されます。 真数、概数でない場合、undefが設定されます。

FIXED_PREC_SCALE 常に精度と位取りが同じではないため、falseが設定されます。

AUTO_UNIQUE_VALUE 真数、概数の場合、新しい行を挿入するとき自動的にユニークな値とはならないため、falseが設定されます。 真数、概数以外の場合、undefが設定されます。

LOCAL_TYPE_NAME Symfoware/RDBで規定されたデータ型を表す文字列が設定されます。

MINIMUM_SCALE 位取りの最小値が設定されます。 MAXIMUM_SCALE 位取りの最大値が設定されます。 SQL_DATA_TYPE 日時型の場合、9が設定されます。

時間隔型の場合、10が設定されます。 日時型、時間隔型以外の場合、SQLデータ型番号が設定されます。

SQL_DATETIME_SUB DATE型の場合、1が設定されます。 TIME型の場合、2が設定されます。 TIMESTAMP型の場合、3が設定されます。 日時型、時間隔型以外の場合、undefが設定されます。

NUM_PREC_RADIX 真数の場合、10が設定されます。 概数の場合、2が設定されます。 真数、概数以外の場合、undefが設定されます。

INTERVAL_PRECISION 時間隔型の場合、時間隔先行フィールド精度の最大文字数が設定されます。 時間隔型以外の場合、undefが設定されます。

Page 96: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

85

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; @type_info = $dbh->type_info( SQL_ALL_TYPE ) ; $c = 0 ; foreach $types ( @type_info ) { $c ++ ; printf "(%d)¥n", $c ; printf "TYPE_NAME : %s¥n", $types->{TYPE_NAME} ; printf "DATA_TYPE : %d¥n", $types->{DATA_TYPE} ; printf "COLUMN_SIZE : %d¥n", $types->{COLUMN_SIZE} ; printf "LITERAL_PREFIX : %s¥n", $types->{LITERAL_PREFIX} ; printf "LITERAL_SUFFIX : %s¥n", $types->{LITERAL_SUFFIX} ; printf "CREATE_PARAMS : %s¥n", $types->{CREATE_PARAMS} ; printf "NULLABLE : %d¥n", $types->{NULLABLE} ; printf "CASE_SENSITIVE : %s¥n", $types->{CASE_SENSITIVE} ? "true" : "false" ; printf "SEARCHABLE : %s¥n", $types->{SEARCHABLE} ; printf "UNSIGNED_ATTRIBUTE : %s¥n", ! defined $types->{UNSIGNED_ATTRIBUTE} ? "undef" : $types->{UNSIGNED_ATTRIBUTE} ? "true" : "false" ; printf "FIXED_PREC_SCALE : %s¥n", ! defined $types->{FIXED_PREC_SCALE} ? "undef" : $types->{FIXED_PREC_SCALE} ? "true" : "false" ; printf "AUTO_UNIQUE_VALUE : %s¥n", ! defined $types->{AUTO_UNIQUE_VALUE} ? "undef" : $types->{AUTO_UNIQUE_VALUE} ? "true" : "false" ; printf "LOCAL_TYPE_NAME : %s¥n", $types->{LOCAL_TYPE_NAME} ; printf "MINIMUM_SCALE : %d¥n", $types->{MINIMUM_SCALE} ; printf "MAXIMUM_SCALE : %d¥n", $types->{MAXIMUM_SCALE} ; printf "SQL_DATA_TYPE : %d¥n", $types->{SQL_DATA_TYPE} ; printf "SQL_DATETIME_SUB : ". ( ! defined $types->{SQL_DATETIME_SUB} ? "%s¥n" : "%d¥n" ), ! defined $types->{SQL_DATETIME_SUB} ? "undef" : $types->{SQL_DATETIME_SUB} ; printf "NUM_PREC_RADIX : ". ( ! defined $types->{NUM_PREC_RADIX} ? "%s¥n" : "%d¥n" ), ! defined $types->{NUM_PREC_RADIX} ? "undef" : $types->{NUM_PREC_RADIX} ; printf "INTERVAL_PRECISION : ". ( ! defined $types->{INTERVAL_PRECISION} ? "%s¥n" : "%d¥n" ), ! defined $types->{INTERVAL_PRECISION} ? "undef" : $types->{INTERVAL_PRECISION} ; } $dbh->disconnect or die "$DBI::errstr¥n" ;

4.8.23 quote

説明 quoteは、指定した値をSQL文の文字列定数の形式に整形して、文字列を返却します。

構文 $str = $dbh->quote( $value ) ; $str = $dbh->quote( $value, $data_type ) ;

Page 97: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

86

パラメタ $value : 整形する値を指定してください。 undefを指定した場合、文字列"NULL"が返却されます。 $data_type : 値のSQLデータ型名を指定してください。use DBI qw(:sql_types)で、SQLデータ型名をインポートすることができます。SQLデータ型名と意味を以下に示します。

SQLデータ型名 意味 SQL_CHAR CHAR SQL_NUMERIC NUMERIC SQL_DECIMAL DECIMAL SQL_INTEGER INTEGER SQL_SMALLINT SMALLINT SQL_FLOAT FLOAT SQL_REAL REAL SQL_DOUBLE DOUBLE SQL_VARCHAR CHAR VARYING SQL_DATE DATE SQL_TIME TIME SQL_TIMESTAMP TIMESTAMP SQL_INTERVAL_YEAR INTERVAL YEAR SQL_INTERVAL_MONTH INTERVAL MONTH SQL_INTERVAL_DAY INTERVAL DAY SQL_INTERVAL_HOUR INTERVAL HOUR SQL_INTERVAL_MINUTE INTERVAL MINUTE SQL_INTERVAL_SECOND INTERVAL SECOND SQL_INTERVAL_YEAR_TO_MONTH INTERVAL YEAR TO MONTH SQL_INTERVAL_DAY_TO_HOUR INTERVAL DAY TO HOUR SQL_INTERVAL_DAY_TO_MINUTE INTERVAL DAY TO MINUTE SQL_INTERVAL_DAY_TO_SECOND INTERVAL DAY TO SECOND SQL_INTERVAL_HOUR_TO_MINUTE INTERVAL HOUR TO MINUTE SQL_INTERVAL_HOUR_TO_SECOND INTERVAL HOUR TO SECOND SQL_INTERVAL_MINUTE_TO_SECOND INTERVAL MINUTE TO SECOND SQL_VARBINARY 32KバイトまでのBLOB SQL_LONGVARBINARY 32Kバイトを超えて2GバイトまでのBLOB SQL_NCHAR NCHAR SQL_NVARCHAR NCHAR VARYING

戻り値 整形した文字列が返却されます。

例 use DBI qw(:sql_types) ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $str = $dbh->quote( "Don't" ) ;

Page 98: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.8 データベースハンドルメソッド

87

printf "%s¥n", $str ; $str = $dbh->quote( 1000 ) ; printf "%s¥n", $str ; $str = $dbh->quote( 1000, SQL_INTEGER ) ; printf "%s¥n", $str ; $str = $dbh->quote( 10, SQL_INTERVAL_YEAR ) ; printf "%s¥n", $str ; $dbh->disconnect or die "$DBI::errstr¥n" ;

Page 99: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

88

4.9 データベースハンドル属性

データベースハンドル属性について説明します。

4.9.1 AutoCommit

説明 AutoCommitは、自動的にコミットするか否かを設定または参照します。 AutoCommitは設定可能です。 デフォルトは自動的にコミットします。

構文 $dbh->{AutoCommit} = $bool ; $bool = $h->{AutoCommit} ;

設定値 $bool : 自動的にコミットする場合、trueを指定してください。 自動的にコミットしない場合、falseを指定してください。

戻り値 自動的にコミットする場合、trueが返却されます。 自動的にコミットしない場合、falseが返却されます。

例 “4.8.10 commit”の“例”を参照してください。

4.9.2 Driver

説明 Driverは、データベースドライバハンドルへの参照を返却します。 Driverは参照のみ可能です。

構文 $drh = $dbh->{Driver} ;

戻り値 データベースドライバハンドルへの参照が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $drh = $dbh->{Driver} ; printf "Name : %s¥n", $drh->{Name} ; # "Symfoware"

Page 100: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.9 データベースハンドル属性

89

$dbh->disconnect or die "$DBI::errstr¥n" ;

4.9.3 Name

説明 Nameは、データソース名から先頭の文字列"dbi:ドライバ名:"を除いた文字列を返却します。 Nameは参照のみ可能です。

構文 $str = $dbh->{Name} ;

戻り値 データソース名から先頭の文字列"dbi:ドライバ名:"を除いた文字列が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; printf "Name : %s¥n", $dbh->{Name} ; # data source name without "dbi:Symfoware:" $dbh->disconnect or die "$DBI::errstr¥n" ;

4.9.4 RowCacheSize

説明 RowCacheSizeは未サポートです。 RowCacheSizeを使用したときの動作は不定です。

Page 101: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

90

4.10 ステートメントハンドルメソッド

ステートメントハンドルメソッドについて説明します。

4.10.1 bind_param

説明 bind_paramは、動的パラメタに対応する値を設定します。 NULL値を指定する場合、値にundefを指定してください。 値のデータ型を指定しない場合、動的パラメタのデータ型になります。

構文 $rc = $sth->bind_param( $param_num, $bind_value ) ; $rc = $sth->bind_param( $param_num, $bind_value, ¥%bind_attr ) ; $rc = $sth->bind_param( $param_num, $bind_value, $bind_type ) ;

パラメタ $param_num : 1以上の数値で動的パラメタの位置を指定してください。 $bind_value : 動的パラメタに対応する値を指定してください。 ¥%bind_attr : 値のデータ型の連想配列を指定してください。 $bind_type : 値のSQLデータ型名を指定してください。use DBI qw(:sql_types)で、SQLデータ型名をインポートすることができます。SQLデータ型名と意味を以下に示します。

SQLデータ型名 意味 SQL_CHAR CHAR SQL_NUMERIC NUMERIC SQL_DECIMAL DECIMAL SQL_INTEGER INTEGER SQL_SMALLINT SMALLINT SQL_FLOAT FLOAT SQL_REAL REAL SQL_DOUBLE DOUBLE SQL_VARCHAR CHAR VARYING SQL_DATE DATE SQL_TIME TIME SQL_TIMESTAMP TIMESTAMP SQL_INTERVAL_YEAR INTERVAL YEAR SQL_INTERVAL_MONTH INTERVAL MONTH SQL_INTERVAL_DAY INTERVAL DAY SQL_INTERVAL_HOUR INTERVAL HOUR

Page 102: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.10 ステートメントハンドルメソッド

91

SQLデータ型名 意味 SQL_INTERVAL_MINUTE INTERVAL MINUTE SQL_INTERVAL_SECOND INTERVAL SECOND SQL_INTERVAL_YEAR_TO_MONTH INTERVAL YEAR TO MONTH SQL_INTERVAL_DAY_TO_HOUR INTERVAL DAY TO HOUR SQL_INTERVAL_DAY_TO_MINUTE INTERVAL DAY TO MINUTE SQL_INTERVAL_DAY_TO_SECOND INTERVAL DAY TO SECOND SQL_INTERVAL_HOUR_TO_MINUTE INTERVAL HOUR TO MINUTE SQL_INTERVAL_HOUR_TO_SECOND INTERVAL HOUR TO SECOND SQL_INTERVAL_MINUTE_TO_SECOND INTERVAL MINUTE TO SECOND SQL_VARBINARY 32KバイトまでのBLOB SQL_LONGVARBINARY 32Kバイトを超えて2GバイトまでのBLOB SQL_NCHAR NCHAR SQL_NVARCHAR NCHAR VARYING

戻り値 trueが返却されます。 異常の場合、falseが返却されます。

例 use DBI qw(:sql_types) ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "CREATE PROCEDURE STOCKS.STOCK_P ( IN PRODUCT_NUMBER INTEGER, IN PRODUCT_NAME CHAR(20), INOUT STOCK_QUANTITY INTEGER, INOUT WAREHOUSE_NUMBER SMALLINT ) BEGIN INSERT INTO STOCKS.STOCK VALUES( PRODUCT_NUMBER, PRODUCT_NAME, STOCK_QUANTITY, WAREHOUSE_NUMBER ) ; COMMIT WORK ; SET STOCK_QUANTITY = STOCK_QUANTITY + 1 ; SET WAREHOUSE_NUMBER = WAREHOUSE_NUMBER + 1 ; END" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "CALL STOCKS.STOCK_P ( ?, ?, ?, ? )" ) or die "$DBI:: errstr¥n" ; $rc = $sth->bind_param( 1, 140, { TYPE => SQL_INTEGER } ) ;printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $rc = $sth->bind_param( 2, "cassette deck" ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $stock_quantity = 120 ; $rc = $sth->bind_param_inout( 3, ¥$stock_quantity, undef ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $warehouse_number = 2 ;

Page 103: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

92

$rc = $sth->bind_param_inout( 4, ¥$warehouse_number, undef, { TYPE => SQL_SMALLINT } ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $sth->execute or die "$DBI::errstr¥n" ; printf "stock_quantity : %d¥n", $stock_quantity ; printf "warehouse_number : %d¥n", $warehouse_number ; $rc = $sth->bind_param( 1, 999, SQL_INTEGER ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $rc = $sth->bind_param( 2, "unknown" ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $stock_quantity = undef ; $rc = $sth->bind_param_inout( 3, ¥$stock_quantity, undef ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $warehouse_number = 999 ; $rc = $sth->bind_param_inout( 4, ¥$warehouse_number, undef, SQL_SMALLINT ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $sth->execute ; printf ! defined $stock_quantity ? "stock_quantity : undef¥n" : "stock_quantity : %d¥n", $stock_quantity ; printf "warehouse_number : %d¥n", $warehouse_number ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NAME = ? OR STOCK_QUANTITY IS NULL" ) or die "$DBI::errstr¥n" ; $rc = $sth->bind_param( 1, "cassette deck", SQL_CHAR ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $sth->execute or die "$DBI::errstr¥n" ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

Page 104: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.10 ステートメントハンドルメソッド

93

4.10.2 bind_param_inout

説明 bind_param_inoutは、CALL文で指定した動的パラメタに対して値を受け渡しする変数を割り当てます。 NULL値を指定する場合、値にundefを指定してください。 値のデータ型を指定しない場合、動的パラメタのデータ型とします。

構文 $rc = $sth->bind_param_inout( $param_num, ¥$bind_value, $max_len ) ; $rc = $sth->bind_param_inout( $param_num, ¥$bind_value, $max_len, ¥%bind_attr ) ; $rc = $sth->bind_param_inout( $param_num, ¥$bind_value, $max_len, $bind_type ) ;

パラメタ $param_num : 1以上の数値で動的パラメタの位置を指定してください。 ¥$bind_value : 動的パラメタに対応する変数を指定してください。 $max_len : プロシジャルーチンから値を受け取るデータの最大長(バイト数)を指定してください。 ¥%bind_attr : 値のデータ型の連想配列を指定してください。 $bind_type : 値のSQLデータ型名を指定してください。use DBI qw(:sql_types)で、SQLデータ型名をインポートすることができます。SQLデータ型名と意味を以下に示します。

SQLデータ型名 意味 SQL_CHAR CHAR SQL_NUMERIC NUMERIC SQL_DECIMAL DECIMAL SQL_INTEGER INTEGER SQL_SMALLINT SMALLINT SQL_FLOAT FLOAT SQL_REAL REAL SQL_DOUBLE DOUBLE SQL_VARCHAR CHAR VARYING SQL_DATE DATE SQL_TIME TIME SQL_TIMESTAMP TIMESTAMP SQL_INTERVAL_YEAR INTERVAL YEAR SQL_INTERVAL_MONTH INTERVAL MONTH SQL_INTERVAL_DAY INTERVAL DAY

Page 105: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

94

SQLデータ型名 意味 SQL_INTERVAL_HOUR INTERVAL HOUR SQL_INTERVAL_MINUTE INTERVAL MINUTE SQL_INTERVAL_SECOND INTERVAL SECOND SQL_INTERVAL_YEAR_TO_MONTH INTERVAL YEAR TO MONTH SQL_INTERVAL_DAY_TO_HOUR INTERVAL DAY TO HOUR SQL_INTERVAL_DAY_TO_MINUTE INTERVAL DAY TO MINUTE SQL_INTERVAL_DAY_TO_SECOND INTERVAL DAY TO SECOND SQL_INTERVAL_HOUR_TO_MINUTE INTERVAL HOUR TO MINUTE SQL_INTERVAL_HOUR_TO_SECOND INTERVAL HOUR TO SECOND SQL_INTERVAL_MINUTE_TO_SECOND INTERVAL MINUTE TO SECOND SQL_VARBINARY 32KバイトまでのBLOB SQL_LONGVARBINARY (注) 32Kバイトを超えて2GバイトまでのBLOB SQL_NCHAR NCHAR SQL_NVARCHAR NCHAR VARYING

戻り値 trueが返却されます。 異常の場合、falseが返却されます。

例 “4.10.1 bind_param”の“例”を参照してください。

4.10.3 execute

説明 executeは、準備されたSQL文を実行します。

構文 $rc = $sth->execute ; $rc = $sth->execute( @bind_values ) ;

パラメタ @bind_values : 動的パラメタに対応する値の配列を指定してください。

戻り値 SQL文が動的SELECT文の場合、-1が返却されます。 SQL文がINSERT文、UPDATE文:探索、UPDATE文:位置付け、DELETE文:探索、DELETE文:位置付けの場合、更新件数が返却されます。 SQL文が動的SELECT文、INSERT文、UPDATE文:探索、UPDATE文:位置付け、DELETE文:探索、DELETE文:位置付け以外の場合、0E0が返却されます。 異常の場合、falseが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError =>

Page 106: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.10 ステートメントハンドルメソッド

95

0 } ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $sth->execute ; $sth = $dbh->prepare( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $rc = $sth->execute ; printf "rc : $rc¥n" ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $sth = $dbh->prepare( "INSERT INTO STOCKS.STOCK VALUES( ?, ?, ?, ? )" ) or die "$DBI::errstr¥n" ; @values = ( 140, "cassette deck", 120, 2 ) ; $rc = $sth->execute( @values ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } @values = ( 110, "television", 85, 2 ) ; $rc = $sth->execute( @values ) ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $sth = $dbh->prepare( "SELECT 300 / ( PRODUCT_NUMBER - 110 ) FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $rc = $sth->execute ; printf "rc : %d¥n", $rc ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } printf "%s¥n", $DBI::errstr ; # zero divide $sth = $dbh->prepare( "DELETE FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $rc = $sth->execute ; printf "rc : %d¥n", $rc ; if( ! $rc ) { die "$DBI::errstr¥n" ; } $sth = $dbh->prepare( "DELETE FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $rc = $sth->execute ; printf "rc : %d¥n", $rc ; if( ! $rc ) { printf "no record¥n" ; } $dbh->disconnect or die "$DBI::errstr¥n" ;

Page 107: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

96

4.10.4 fetchrow_array

説明 fetchrow_arrayは、次の行をフェッチし、一行の値の配列を返却します。 フェッチしたデータがNULL値の場合、配列の値はundefとなります。

構文 $array = $sth->fetchrow_array ;

戻り値 値の配列が返却されます。 行がない場合または異常の場合、要素数が0個の配列が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; while( @array = $sth->fetchrow_array ) { foreach $value ( @array ) { printf ! defined $value ? "undef¥n" : "$value¥n" ; } } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.10.5 fetchrow_arrayref

説明 fetchrow_arrayrefは、次の行をフェッチし、一行の値の配列への参照を返却します。 フェッチしたデータがNULL値の場合、配列の値はundefとなります。

構文 $array_ref = $sth->fetchrow_arrayref ; $array_ref = $sth->fetch ;

Page 108: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.10 ステートメントハンドルメソッド

97

戻り値 値の配列への参照が返却されます。 行がない場合または異常の場合、undefが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; while( $array_ref = $sth->fetchrow_arrayref ) { foreach $value ( @$array_ref ) { printf ! defined $value ? "undef¥n" : "$value¥n" ; } } $sth = $dbh->prepare( "SELECT PRODUCT_NAME, STOCK_QUANTITY FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; # using bind_col (the fastest path) $sth->execute ; $sth->bind_col( 1, ¥$product_name ) or die "$DBI::errstr¥n" ; $sth->bind_col( 2, ¥$stock_quantity ) or die "$DBI::errstr¥n" ; while( $sth->fetchrow_arrayref ) { printf "$product_name¥n" ; printf ! defined $stock_quantity ? "undef¥n" : "$stock_quantity¥n" ; } # using bind_columns (the fastest path) $sth->execute ; $sth->bind_columns( ¥( $product_name, $stock_quantity ) ) or die "$DBI::errstr¥n" ; while( $sth->fetchrow_arrayref ) { printf "$product_name¥n" ; printf ! defined $stock_quantity ? "undef¥n" : "$stock_quantity¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.10.6 fetchrow_hashref

説明 fetchrow_hashrefは、次の行をフェッチし、一行の値を列名で対応付けた連

Page 109: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

98

想配列の参照を返却します。 フェッチしたデータがNULL値の場合、連想配列の値はundefとなります。 マルチバイトの考慮が足りません。"NAME_uc"を指定すると列名の大文字への変換が発生し、マルチバイト文字列の途中のバイトを小文字とみなして大文字に変換することがあります。また、"NAME_lc"を指定すると列名の小文字への変換が発生し、マルチバイト文字列の途中のバイトを大文字とみなして小文字に変換することがあります。マルチバイト文字列の詳細は、“6.3 マルチバイト文字列の注意”を参照してください。

構文 $hash_ref = $sth->fetchrow_hashref ; $hash_ref = $sth->fetchrow_hashref( $name ) ;

パラメタ $name : 列名を大文字とする場合、"NAME"または"NAME_uc"を指定してください。 列名を小文字とする場合、"NAME_lc"を指定してください。

戻り値 値を列名で対応付けた連想配列の参照が返却されます。 行がない場合または異常の場合、undefが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; while( $hash_ref = $sth->fetchrow_hashref ) { printf "$hash_ref->{PRODUCT_NAME}¥n" ; printf ! defined $hash_ref->{STOCK_QUANTITY} ? "undef¥n" : "$hash_ref->{STOCK_QUANTITY}¥n" ; } # lower case $sth->execute ; while( $hash_ref = $sth->fetchrow_hashref( "NAME_lc" ) ) { printf "$hash_ref->{product_name}¥n" ; printf ! defined $hash_ref->{stock_quantity} ? "undef¥n" : "$hash_ref->{stock_quantity}¥n" ; } $dbh->disconnect or die "$DBI::errstr¥n" ;

Page 110: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.10 ステートメントハンドルメソッド

99

4.10.7 fetchall_arrayref

説明 fetchall_arrayrefは、すべての行をフェッチし、すべての列または指定した一部の列について、値の配列への参照の配列への参照を返却します。 フェッチしたデータがNULL値の場合、配列の値はundefとなります。

構文 $array_ref = $sth->fetchall_arrayref ; $array_ref = $sth->fetchall_arrayref( $slice_array ) ; $array_ref = $sth->fetchall_arrayref( $slice_hash ) ; $array_ref = $sth->fetchall_arrayref( $slice_array, $max_row ) ; $array_ref = $sth->fetchall_arrayref( $slice_hash, $max_row ) ;

パラメタ $slice_array : 選択する列を配列番号で指定してください。 $slice_hash : 選択する列を連想配列で指定してください。 $max_row: 最大検索件数を指定してください。

戻り値 値の配列への参照の配列への参照が返却されます。 行がない場合または異常の場合、要素数が0個の配列への参照が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; # no slice $sth->execute ; $array_ref = $sth->fetchall_arrayref ; foreach $array ( @$array_ref ) { foreach $value ( @$array ) {

Page 111: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

100

printf ! defined $value ? "undef¥n" : "$value¥n" ; } } die "$DBI::errstr¥n" if $DBI::err ; # slice array $sth->execute ; $array_ref = $sth->fetchall_arrayref( [ 1, 2 ] ) ; foreach $array ( @$array_ref ) { printf "$array->[0]¥n" ; printf ! defined $array->[1] ? "undef¥n" : "$array->[1]¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; # slice hash $sth->execute ; $array_ref = $sth->fetchall_arrayref( { PRODUCT_NAME => 1, STOCK_QUANTITY => 1 } ) ; foreach $array ( @$array_ref ) { printf "$array->{PRODUCT_NAME}¥n" ; printf ! defined $array->{STOCK_QUANTITY} ? "undef¥n" : "$array-> {STOCK_QUANTITY}¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.10.8 fetchall_hashref

説明 fetchall_hashrefは、すべての行をフェッチし、すべての行の値を列名で対応付けた連想配列への参照を列の値で対応付けた連想配列への参照を返却します。 フェッチしたデータがNULL値の場合、連想配列の値はundefとなります。

構文 $hash_ref = $sth->fetchall_hashref( $column_name_or_number ) ;

パラメタ $column_name_or_number : 列名または1以上の数値で列の位置を指定してください。

戻り値 すべての行の値を列名で対応付けた連想配列への参照を列の値で対応付けた連想配列への参照が返却されます。 行がない場合または異常の場合、要素数が0個の連想配列への参照が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ;

Page 112: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.10 ステートメントハンドルメソッド

101

$dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; printf "%s¥n", $dbh->{FetchHashKeyName} ; $dbh->{FetchHashKeyName} = "NAME_uc" ; printf "%s¥n", $dbh->{FetchHashKeyName} ; $hash_ref = $sth->fetchall_hashref( "PRODUCT_NUMBER" ) ; @keys = keys( %$hash_ref ) ; foreach $key ( @keys ) { printf "$hash_ref->{$key}->{PRODUCT_NUMBER}¥n" ; printf ! defined $hash_ref->{$key}->{STOCK_QUANTITY} ? "undef¥n" : "$hash_ref->{$key}->{STOCK_QUANTITY}¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.10.9 finish

説明 finishは、明示的にフェッチを終了させます。 動的SELECT文以外のステートメントハンドルに対しfinishを呼び出しても効果はありません。

構文 $rc = $sth->finish ;

戻り値 trueが返却されます。 異常の場合、falseが返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "INSERT INTO STOCKS.STOCK VALUES( ?, ?, ?, ? )" ) or die "$DBI::errstr¥n" ; @values = ( 140, "cassette deck", 120, 2 ) ;

Page 113: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

102

$sth->execute( @values ) or die "$DBI::errstr¥n" ; $rc = $sth->finish ; # no effective if( ! $rc ) { die "$DBI::errstr¥n" ; } @values = ( 110, "television", 85, 2 ) ; $sth->execute( @values ) or die "$DBI::errstr¥n" ; $rc = $sth->finish ; # no effective if( ! $rc ) { die "$DBI::errstr¥n" ; } $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; @array = $sth->fetchrow_array ; printf "@array¥n" ; $rc = $sth->finish ; if( ! $rc ) { die "$DBI::errstr¥n" ; } @array = $sth->fetchrow_array ; printf "@array¥n" ; if( $DBI::err ) { printf "no record¥n" ; } $dbh->disconnect or die "$DBI::errstr¥n" ;

4.10.10 rows

説明 rowsは、ハンドルの実行により影響を受けた行数を返却します。

構文 $rc = $sth->rows ;

戻り値 SQL文が動的SELECT文の場合、-1が返却されます。 SQL文がINSERT文、UPDATE文:探索、UPDATE文:位置付け、DELETE文:探索、DELETE文:位置付けの場合、更新件数が返却されます。

Page 114: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.10 ステートメントハンドルメソッド

103

SQL文が動的SELECT文、INSERT文、UPDATE文:探索、UPDATE文:位置付け、DELETE文:探索、DELETE文:位置付け以外の場合、0E0が返却されます。

例 “4.5.4 DBI::rows”の“例”を参照してください。

4.10.11 bind_col

説明 bind_colは、フェッチしたデータを受け取る変数を割り当てます。

構文 $rc = $sth->bind_col( $param_num, ¥$bind_value ) ;

パラメタ $param_num : 1以上の列の番号を指定してください。 ¥$bind_value : フェッチしたデータを受け取る変数を指定してください。

戻り値 trueが返却されます。 異常の場合、falseが返却されます。

例 “4.10.5 fetchrow_arrayref”の“例”を参照してください。

4.10.12 bind_columns

説明 bind_columnsは、フェッチしたデータを受け取る複数の変数を割り当てます。 内部的にbind_colを使用します。

構文 $rc = $sth->bind_columns( @bind_values ) ;

パラメタ @bind_values : フェッチしたデータを受け取る変数への参照の配列を指定してください。

戻り値 trueが返却されます。 異常の場合、falseが返却されます。

例 “4.10.5 fetchrow_arrayref”の“例”を参照してください。

Page 115: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

104

4.10.13 dump_results

説明 dump_resultsは、すべての行をフェッチし、指定した行区切り文字で指定したファイルハンドルに出力します。 内部的にDBI::neat_listを使用します。

構文 $rc = $sth->dump_results( $max_len, $line_sep, $field_sep, $fh ) ;

パラメタ $max_len : 行の最大長を指定してください。 undefの場合、35となります。 $line_sep : 行の区切り文字を指定してください。 undefの場合、"¥n"となります。 $field_sep : 列の区切り文字を指定してください。 undefの場合、コンマと空白(, )となります。 $fh : ファイルハンドルを指定してください。 undefの場合、標準出力STDOUTに出力します。

戻り値 件数が返却されます。 異常の場合、フェッチできた件数が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 140, 'cassette deck', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 110, 'television', 85, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.STOCK VALUES( 999, 'unknown', NULL, 999 )" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK" ) or die "$DBI::errstr¥n" ; $sth->execute ; $rc = $sth->dump_results( undef, undef, undef, undef ) or die "$DBI::errstr¥n" ; printf "rc : %d¥n", $rc ; die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

Page 116: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.11 ステートメントハンドル属性

105

4.11 ステートメントハンドル属性

ステートメントハンドル属性について説明します。

4.11.1 NUM_OF_FIELDS

説明 NUM_OF_FIELDSは、選択リストの列数を返却します。 NUM_OF_FIELDSは参照のみ可能です。

構文 $rc = $sth->{NUM_OF_FIELDS} ;

戻り値 SQL文が動的SELECT文の場合、列数が返却されます。 SQL文が動的SELECT文でない場合、0が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "INSERT INTO STOCKS.STOCK VALUES( ?, ?, ?, ? )" ) or die "$DBI::errstr¥n" ; printf "NUM_OF_FIELDS : %d¥n", $sth->{NUM_OF_FIELDS} ; printf "NUM_OF_PARAMS : %d¥n", $sth->{NUM_OF_PARAMS} ; @values = ( 140, "cassette deck", 120, 2 ) ; $sth->execute( @values ) or die "$DBI::errstr¥n" ; @values = ( 110, "television", 85, 2 ) ; $sth->execute( @values ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NAME IN ( ?, ? )" ) or die "$DBI::errstr¥n" ; printf "NUM_OF_FIELDS : %d¥n", $sth->{NUM_OF_FIELDS} ; printf "NUM_OF_PARAMS : %d¥n", $sth->{NUM_OF_PARAMS} ; @values = ( "cassette deck", "television" ) ; $sth->execute( @values ) ; for( $i = 0 ; $i < $sth->{NUM_OF_FIELDS} ; $i ++ ) { printf "(%d)¥n", $i ; printf "NAME : %s¥n", $sth->{NAME}->[ $i ] ; printf "NAME_uc : %s¥n", $sth->{NAME_uc}->[ $i ] ; printf "NAME_lc : %s¥n", $sth->{NAME_lc}->[ $i ] ; printf "TYPE : %d¥n", $sth->{TYPE}->[ $i ] ; printf "PRECISION : %d¥n", $sth->{PRECISION}->[ $i ] ; printf "SCALE : %d¥n", $sth->{SCALE}->[ $i ] ; printf "NULLABLE : %d¥n", $sth->{NULLABLE}->[ $i ] ; } die "$DBI::errstr¥n" if $DBI::err ;

Page 117: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

106

$sth->finish ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.11.2 NUM_OF_PARAMS

説明 NUM_OF_PARAMSは、動的パラメタ数を返却します。 NUM_OF_PARAMSは参照のみ可能です。

構文 $rc = $sth->{NUM_OF_PARAMS} ;

戻り値 動的パラメタ数が返却されます。

例 “4.11.1 NUM_OF_FIELDS”の“例”を参照してください。

4.11.3 NAME

説明 NAMEは、選択リストの列名の配列への参照を返却します。 NAMEは参照のみ可能です。

構文 $name = $sth->{NAME} ;

戻り値 列名の配列への参照が返却されます。

例 “4.11.1 NUM_OF_FIELDS”の“例”を参照してください。

4.11.4 NAME_lc

説明 NAME_lcは、選択リストの小文字の列名の配列への参照を返却します。 NAME_lcは参照のみ可能です。 マルチバイトの考慮はありません。小文字への変換で、マルチバイトの途中のバイトを大文字とみなして小文字に変換することがあります。マルチバイト文字列の詳細は、“6.3 マルチバイト文字列の注意”を参照してください。

構文 $name_lc = $sth->{NAME_lc} ;

Page 118: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.11 ステートメントハンドル属性

107

戻り値 小文字の列名の配列への参照が返却されます。

例 “4.11.1 NUM_OF_FIELDS”の“例”を参照してください。

4.11.5 NAME_uc

説明 NAME_ucは、選択リストの大文字の列名の配列への参照を返却します。 NAME_ucは参照のみ可能です。 マルチバイトの考慮はありません。大文字への変換で、マルチバイトの途中のバイトを小文字とみなして大文字に変換することがあります。マルチバイト文字列の詳細は、“6.3 マルチバイト文字列の注意”を参照してください。

構文 $name_uc = $sth->{NAME_uc} ;

戻り値 大文字の列名の配列への参照が返却されます。

例 “4.11.1 NUM_OF_FIELDS”の“例”を参照してください。

4.11.6 TYPE

説明 TYPEは、選択リストの列のSQLデータ型番号の配列への参照を返却します。 TYPEは参照のみ可能です。

構文 $type = $sth->{TYPE} ;

戻り値 SQLデータ型番号の配列への参照が返却されます。SQLデータ型番号と意味を以下に示します。 SQLデータ型番号 意味 1 CHAR 2 NUMERIC 3 DECIMAL 4 INTEGER 5 SMALLINT 7 REAL、FLOATの精度1から23まで 8 DOUBLE、FLOATの精度24から52まで 12 CHAR VARYING

Page 119: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

108

SQLデータ型番号 意味 91 DATE 92 TIME 93 TIMESTAMP 101 INTERVAL YEAR 102 INTERVAL MONTH 103 INTERVAL DAY 104 INTERVAL HOUR 105 INTERVAL MINUTE 106 INTERVAL SECOND 107 INTERVAL YEAR TO MONTH 108 INTERVAL DAY TO HOUR 109 INTERVAL DAY TO MINUTE 110 INTERVAL DAY TO SECOND 111 INTERVAL HOUR TO MINUTE 112 INTERVAL HOUR TO SECOND 113 INTERVAL MINUTE TO SECOND -3 32KバイトまでのBLOB -4 32Kバイトを超えて2GバイトまでのBLOB -91 NCHAR -93 NCHAR VARYING

例 “4.11.1 NUM_OF_FIELDS”の“例”を参照してください。

4.11.7 PRECISION

説明 PRECISIONは、選択リストの列の精度の配列への参照を返却します。 PRECISIONは参照のみ可能です。

構文 $precision = $sth->{PRECISION} ;

戻り値 精度の配列への参照が返却されます。

例 “4.11.1 NUM_OF_FIELDS”の“例”を参照してください。

4.11.8 SCALE

説明 SCALEは、選択リストの列の位取りの配列への参照を返却します。 SCALEは参照のみ可能です。

Page 120: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.11 ステートメントハンドル属性

109

構文 $scale = $sth->{SCALE} ;

戻り値 位取りの配列への参照が返却されます。

例 “4.11.1 NUM_OF_FIELDS”の“例”を参照してください。

4.11.9 NULLABLE

説明 NULLABLEは、選択リストの列がNULLを持つ可能性の配列への参照を返却します。 NULLABLEは参照のみ可能です。

構文 $nullable = $sth->{NULLABLE} ;

戻り値 NULLを持つ可能性値の配列への参照が返却されます。 NULLの値を持つ可能性がない場合、0が返却されます。 NULLの値を持つ可能性がある場合、1が返却されます。

例 “4.11.1 NUM_OF_FIELDS”の“例”を参照してください。

4.11.10 CursorName

説明 CursorNameは、カーソル名を返却します。 CursorNameは参照のみ可能です。

構文 $name = $sth->{CursorName} ;

戻り値 カーソル名が返却されます。

例 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.STOCK CASCADE" ) ; $sth = $dbh->prepare( "CREATE TABLE STOCKS.STOCK ( PRODUCT_NUMBER INTEGER NOT NULL, PRODUCT_NAME CHAR(20) NOT NULL, STOCK_QUANTITY INTEGER, WAREHOUSE_NUMBER SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ;

Page 121: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第4章 DBI・DBD::Symfowareの仕様

110

printf "CursorName : %s¥n", $sth->{CursorName} ; printf "Statement : %s¥n", $sth->{Statement} ; $sth->execute or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "INSERT INTO STOCKS.STOCK VALUES( ?, ?, ?, ? )" ) or die "$DBI::errstr¥n" ; printf "CursorName : %s¥n", $sth->{CursorName} ; printf "Statement : %s¥n", $sth->{Statement} ; @values = ( 140, "cassette deck", 120, 2 ) ; $sth->execute( @values ) or die "$DBI::errstr¥n" ; @values = ( 110, "television", 85, 2 ) ; $sth->execute( @values ) or die "$DBI::errstr¥n" ; @values = ( "cassette deck", "television" ) ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.STOCK WHERE PRODUCT_NAME IN ( ?, ? )" ) ; printf "CursorName : %s¥n", $sth->{CursorName} ; printf "Statement : %s¥n", $sth->{Statement} ; $sth->execute( @values ) ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ; $dbh->disconnect or die "$DBI::errstr¥n" ;

4.11.11 ParamValues

説明 ParamValuesは未サポートです。 ParamValuesを使用したときの動作は不定です。

4.11.12 Statement

説明 Statementは、SQL文を返却します。 Statementは参照のみ可能です。

構文 $name = $sth->{Statement} ;

戻り値 SQL文が返却されます。

例 “4.11.10 CursorName”の“例”を参照してください。

4.11.13 RowsInCache

Page 122: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

4.11 ステートメントハンドル属性

111

説明 RowsInCacheは未サポートです。 RowsInCacheを使用したときの動作は不定です。

Page 123: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server
Page 124: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第5章 RDBコマンドの呼び出し

本章では、Perlのコマンド呼び出し機能を用いてRDBコマンドを呼び出す方法について説明します。 5.1 RDBコマンドの呼び出し方法 5.2 RDBコマンドの呼び出し例

Page 125: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第5章 RDBコマンドの呼び出し

114

5.1 RDBコマンドの呼び出し方法

RDBコマンドの呼び出し方法について説明します。

RDBコマンドの呼び出しとは Perlにはコマンドを呼び出す機能が用意されています。この機能を用いてRDBコマンドを呼び出すことが可能です。

RDBコマンドを実行するマシン PerlスクリプトからRDBコマンドを呼び出したとき、Perlスクリプトを実行しているマシンのSymfoware/RDBに対するRDBコマンドが呼び出されます。Perlスクリプトを実行しているマシン以外のSymfoware/RDBに対するRDBコマンドの呼び出しはできません。

RDBコマンドを実行するユーザ PerlスクリプトからRDBコマンドを呼び出したとき、Perlスクリプトを実行するユーザがRDBコマンドを実行するユーザとなります。 Perlスクリプトから、実行するユーザを判定するRDBコマンドを呼び出す場合、Perlスクリプトを実行するユーザに対し、資源を操作することのできる権限を与える必要があります。実行するユーザを判定するRDBコマンドや権限の詳細は、“RDB管理者ガイド”の“各操作で必要な権限”を参照してください。

Page 126: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

5.2 RDBコマンドの呼び出し例

115

5.2 RDBコマンドの呼び出し例

RDBコマンドの呼び出し例について説明します。

5.2.1 systemを用いたRDBコマンドの呼び出し

systemを用いたRDBコマンドの呼び出しについて説明します。

systemとは systemは、コマンドを実行し、コマンドの結果文字列をそのまま表示し、コマンドの復帰値を返却します。 systemは、標準入力によるデータを必要としないRDBコマンドの呼び出しに使用することができます。

systemを用いたRDBコマンドの呼び出し例 systemを用いたRDBコマンドの呼び出し例を以下に示します。 system( "rdbps" ) ; $rc = unpack( "c", pack( "c", $? >> 8 & 0xff ) ) ; printf "rc : %d¥n", $rc ;

5.2.2 open2を用いたRDBコマンドの呼び出し

open2を用いたRDBコマンドの呼び出しについて説明します。

open2とは open2は、コマンドに対する標準入力、標準出力のハンドルを返却します。 open2は、コマンドに対して標準入力を送り込み、標準出力のデータを受け取ることができます。 open2は、標準入力によるデータを必要とするRDBコマンドの呼び出しに使用することができます。

open2を用いたRDBコマンドの呼び出し例 open2を用いたRDBコマンドの呼び出し例を以下に示します。 use FileHandle ; use IPC::Open2 ; $pid = open2( ¥*Reader, ¥*Writer, "rdbprt -d RDBDB -m DEF - 2>&1" ) ; Writer->autoflush() ; print Writer << "EOD" ; SCHEMA(STOCKS) EOD print Writer pack( "h", "0xff" ) if( $^O == "MSWin32" ) ; close Writer ; while( $str = <Reader> ) { # read with line feed mark

Page 127: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第5章 RDBコマンドの呼び出し

116

printf "%s", $str ; } wait ; $rc = unpack( "c", pack( "c", $? >> 8 & 0xff ) ) ; printf "rc : %d¥n", $rc ;

Page 128: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第6章 注意事項

本章では、PerlからSymfoware/RDBのデータベースをアクセスするときの注意事項について説明します。 6.1 DBD::Symfowareの制限 6.2 RDBコマンドの呼び出しの制限 6.3 マルチバイト文字列の注意

Page 129: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第6章 注意事項

118

6.1 DBD::Symfowareの制限

DBD::Symfowareの制限について説明します。

自動コミットの動作 自動コミットにおいて、検索中に他のSQL文を実行すると、検索を続けることができなくなります。また、複数の検索を行っているときに、ある1つの検索が終了すると他の検索を続けることができなくなります。 検索中に他のSQL文を実行するときや複数の検索を行う場合は、自動コミットを使用しないでください。

文字列長の制限 文字列型において、取り出すときの長さが32000バイトを超えるものは検索できません。データベース内部文字コードの長さより取り出すときの文字コードの長さが延びる場合は、32000を超えることがありますので注意が必要です。

動的パラメタの制限 動的パラメタの精度と位取りは、対応する列の精度と位取りを採用します。

値式の制限 値式にROW_ID(行識別子)を指定することはできません。

列名の取得の制限 NAMEを用いて選択リストの列名を取得したとき、列名は必ずOSの文字コード系となります。

子プロセスへのハンドル継承不可 forkを用いて子プロセスを生成し、その子プロセスにハンドルを継承し、子プロセスでハンドルを用いてデータベースアクセスすることはできません。

Page 130: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

6.2 RDBコマンドの呼び出しの制限

119

6.2 RDBコマンドの呼び出しの制限

RDBコマンドの呼び出しの制限について説明します。

DBD::SymfowareによるデータベースアクセスとRDBコマンドの呼び出しの混在不可

PerlスクリプトからRDBコマンドを呼び出したとき、PerlインタプリタのプロセスからRDBコマンドのプロセスが生成されます。 PerlスクリプトからDBD::Symfowareを用いたSymfoware/RDBへのアクセス中にRDBコマンドを呼び出した場合、PerlスクリプトのプロセスとRDBコマンドのプロセスの間で排他が発生し、排他エラーや排他待ちが発生する可能性があります。排他の詳細は、“RDB ユーザーズガイド データベース定義編”の“応用プログラムおよびRDBコマンド間の排他”を参照してください。 よって、PerlスクリプトからDBD::Symfowareを用いたSymfoware/RDBへのアクセス中にRDBコマンドを呼び出さないでください。

停止しないRDBコマンドの呼び出し不可 rdblkinfコマンドに-dオプションを指定した場合、rdblkinfコマンドは強制停止が行われるまで実行中となります。 Perlスクリプトから実行中のコマンドを強制停止する方法はありません。 よって、Perlスクリプトから停止しないRDBコマンドを呼び出さないようにしてください。

RDBコマンドに対して標準入力を送り込むときの制限 Windowsにおいて、“5.2.2 open2を用いたRDBコマンドの呼び出し”で、RDBコマンドに対して標準入力を送り込んだときに、正しく動作しないことがあります また、ApacheのPerlモジュール“mod_perl”において、RDBコマンドに対して標準入力を送り込んだときに正しく動作しません。

Page 131: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第6章 注意事項

120

6.3 マルチバイト文字列の注意

マルチバイト文字列の注意について説明します。

6.3.1 マルチバイト文字列の問題

マルチバイト文字列の問題について説明します。

マルチバイト文字列の問題とは Perlには、Perlスクリプト中の文字にEUC(Extended UNIX Code)、シフトJISコードが含まれているときの考慮が足りません。そのためいくつかの問題が起こることが分かっています。

正規表現の問題 文字列が"A"から"Z"の範囲であることを判定する場合に"A-Z"という正規表現を用います。一方、文字列が"あ"から"ん"の範囲であることを判定する場合に"あ-ん"という正規表現を用いても、期待する結果になりません。

文字列長、部分文字列の問題 処理の内容によっては、文字"あ"を一文字と換算したいことがありますが、、文字列の長さはバイト数です。よって、"あいうえお"の長さは10バイトであり、マルチバイト文字列"あいうえお"から二文字目を取り出すと、"い"ではなく"あ"の後方1バイトの文字となります。

シフトJIS文字列の0x5cの問題 シフトJIS文字列中に16進数で0x5c(¥)の文字を含む場合、Perlの構文エラーとなります。これを避けるためには、EUCコードのPerlスクリプトに書き直す、または0x5cの前に0x5cを指定する必要があります。 0x5cの前に0x5cを指定する例を以下に示します。 use DBI ; $dbh = DBI->connect( "dbi:Symfoware:RDBDB", "rdbmng", "******", { PrintError => 0 } ) or die "$DBI::errstr¥n" ; $dbh->do( "DROP TABLE STOCKS.在庫表¥ CASCADE" ) ; $dbh->do( "CREATE TABLE STOCKS.在庫表¥ ( 製品番号 INTEGER NOT NULL, 製品名 CHAR(20) NOT NULL, 在庫数量 INTEGER, 倉庫番号 SMALLINT NOT NULL ) ON DBSP1" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.在庫表¥ VALUES( 140, '演奏装置', 120, 2 )" ) or die "$DBI::errstr¥n" ; $dbh->do( "INSERT INTO STOCKS.在庫表¥ VALUES( 110, '表¥示装置', 85, 2 )" ) or die "$DBI::errstr¥n" ; $sth = $dbh->prepare( "SELECT * FROM STOCKS.在庫表¥" ) or die "$DBI::errstr¥n" ; printf "Statement : %s¥n", $sth->{Statement} ; $sth->execute ; while( @array = $sth->fetchrow_array ) { printf "@array¥n" ; } die "$DBI::errstr¥n" if $DBI::err ;

Page 132: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

6.3 マルチバイト文字列の注意

121

$dbh->disconnect or die "$DBI::errstr¥n" ;

DBIでのマルチバイト文字の扱い DBI::neatにおいて、マルチバイト文字を印字不可能な文字と判断しピリオド(.)に置換することがあります。dump_resultやDBI::neat_listは、DBI::neatを用いるため、dump_result、DBI::neat_list、DBI::neatを用いてフェッチしたデータを表示するとマルチバイト文字は正しく表示されないことがあります。dbishはdump_resultを用いてフェッチしたデータを表示するため、マルチバイト文字は正しく表示されないことがあります。 DBI::neat、DBI::neat_listにおいて、指定するデータ長はバイト数です。データ中にマルチバイト文字列を含む場合において、指定するデータ長がマルチバイト文字の途中のバイトまでのとき、マルチバイト文字の途中のバイトでデータが切り捨てられます(いわゆるマルチバイト文字の泣き別れが生じます)。 NAME_lc、NAME_ucにおいて、列名の大文字を小文字または小文字を大文字に置換します。列名がマルチバイト文字のとき、バイト中の大文字と小文字を置換してしまうことがあります。

6.3.2 UTF-8

UTF-8について説明します。

UTF-8 “6.3.1 マルチバイト文字列の問題”で述べた問題を解決するために、UTF-8を用いることが考えられます。 Perl 5.6.1は実験的にUTF-8をサポートしています。よって、UTF-8を用いてPerlスクリプトを作ることが可能です。 PerlスクリプトをUTF-8で作成した場合、環境変数RDBCHARSET、RDBNCHARにUTF8を指定してください。環境変数RDBCHARSET、RDBNCHARの詳細は、“RDBユーザーズガイド 応用プログラム開発編”の“環境変数”を参照してください。 ただし、あくまでもPerl 5.6.1は“実験的にUTF-8をサポートしている”という段階です。UTF-8での動作は、ご自身の責任でお願いします。

6.3.3 JPerl

JPerlについて説明します。

JPerl “6.3.1 マルチバイト文字列の問題”の“シフトJIS文字列の0x5cの問題”で述べた問題を解決するために、日本の有志によってJPerlを開発、公開しています。 JPerlを導入する場合、JPerlに合致したパージョンであるPerl 5.005_03をインストールする必要があります(現在、Perl 5.6.1のバージョンに合致した

Page 133: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

第6章 注意事項

122

JPerlはありません)。 Active Perl 5.005_03はPPM(Perl Package Manager)の形式が古いため、DBI、DBD::Symfowareはビルドしてインストールすることになります。また、DBI-1.22以降のDBIは、Perl 5.6.1の機能を用いているため、Active Perl 5.005_03に対応できません。 Perlと同様に、JPerlはGPL(GNU General Public Licence:一般公的使用承諾)に基づいて公開されています。動作保証がないといったGPLの各種条件を承諾することにより、無償でJPerlを使用することができます。 JPerlの動作については、ご自身の責任でお願いします。

Page 134: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

付録A connect、connect_cachedのパラメタの記述形式

connect、connect_cachedで指定するパラメタの記述形式について説明します。

パラメタの記述形式 パラメタは、“CLI_”で始まる文字列です。複数のパラメタを指定する場合は、セミコロン“;”で区切って記述します。

パラメタの種類 パラメタには、以下のものがあります。 CLI_BUFFER_SIZE CLI_CAL_ERROR CLI_CHAR_SET CLI_CHARACTER_TRANSLATE CLI_COREFILE_PATH CLI_DEFAULT_INDEX_SIZE CLI_DEFAULT_OBJECT_TABLE_SIZE CLI_DEFAULT_TABLE_SIZE CLI_DSI_EXPAND_POINT CLI_DSO_LOCK CLI_INCLUSION_DSI CLI_ISOLATION_WAIT CLI_MAX_SQL (注1) CLI_MSG_LANG CLI_NCHAR_CODE CLI_OPL_BUFFER_SIZE (注2) CLI_PARALLEL_SCAN CLI_R_LOCK CLI_RCV_MODE CLI_RESULT_BUFFER CLI_ROUTINE_SNAP CLI_SERVER_ENV_FILE CLI_SORT_MEM_SIZE CLI_STORAGE_AREA_AUTO_SET CLI_SQL_LEVEL CLI_SQL_SNAP CLI_TRAN_SPEC CLI_WAIT_TIME CLI_WORK_ALLOC_SPACESIZE (注3) CLI_WORK_PATH

Page 135: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

付録A connect、connect_cachedのパラメタの記述形式

124

注1) 現状、CLI_MAX_SQLに指定できるSQL文の数は2~255です。将来的に2~32000となる予定です。 注2) 現状、CLI_OPL_BUFFER_SIZEに指定できるバッファサイズは1~10240です。将来的に1~1280000となる予定です。 注3) 現状、CLI_WORK_ALLOC_SPACESIZEに指定できる初期量は5000~50000、増分量は1000~100000です。将来的に5000~1000000、1000~1000000となる予定です。

パラメタの形式 パラメタの形式は、クライアント動作環境ファイルの仕様に準拠しています。connect、pconnectで指定できるオプションの先頭の“CLI_”を取り除いたものが、クライント用動作環境ファイルのパラメタに一致します。ただし、CLI_STORAGE_AREA_AUTO_SETは、“CLI_STORAGE_AREA_AUTO_SET”を参照してください。 クライアント用動作環境ファイルのパラメタの詳細は、“RDBユーザーズガイド 応用プログラム開発編”の“クライアント用の動作環境ファイルの作成”を参照してください。

CLI_STORAGE_AREA_AUTO_SET

説明 CLI_STORAGE_AREA_AUTO_SETは、格納領域指定を省略した表定義、インデックス定義に対し、格納領域指定を付加するか否かを設定します。 CLI_STORAGE_AREA_AUTO_SETの省略値は、格納領域指定を付加します。

形式 CLI_STORAGE_AREA_AUTO_SET=( YES | NO )

パラメタ

YES : 格納領域指定を省略した表定義、インデックス定義に対し、格納領域指定を付加します。

NO : 格納領域指定を省略した表定義、インデックス定義に対し、格納領域指定を付加しません。

Page 136: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

125

付録B DBD::Symfowareの修正履歴

DBD::Symfowareのソースの修正履歴について説明します。

DBD::Symfoware 1.00 DBD::Symfowareの初版です。

Page 137: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server
Page 138: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

127

付録C DBD::Symfowareのソースの構成

DBD::Symfowareのソースの構成について説明します。 ご自身でDBD::Symfowareをカスタマイズする場合の参考にしてください。カスタマイズ後のDBD::Symfowareの動作については、ご自身の責任でお願いします。

DBD::Symfowareの開発経緯 DBD::Symfowareは、CPAN(http://www.cpan.org/modules/by-module/DBD/)で公開されているDBD::ODBCのソース(DBD-ODBC-0.43.tar.gz)を流用し、ODBC(Open Database Connectivity)関数呼び出しをSymfoware/RDBのCLI(Call Level Interface)関数呼び出しに変更し、Symfoware/RDBに最適なインタフェースとなるように一部の処理を修正しています。Symfoware/RDBのCLI関数の詳細は、富士通の技術員に問い合わせ願います。

DBD::Symfowareのソースの構成 DBD::Symfowareをカスタマイズする場合、主に以下の2つのソースファイルを修正することになります。

dbdimp.c dbdimp.cは、DBIから呼び出されるPerlモジュールのサブルーチン群で、C言語で記述されています。

Symfoware.pm Symfoware.pmは、DBIから呼び出されるPerlモジュールで、Perlスクリプトで記述されています。

Page 139: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server
Page 140: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

129

用語集

アーカイバ 複数のファイルをデータ圧縮してアーカイブファイルを作成したり、アーカイブファイルを展開しなおして複数のファイルに戻す機能をもったソフトウェアです。

アーカイブ アーカイバを用いて複数のファイルをデータ圧縮してアーカイブファイルにしたものです。

一時表 応用プログラムの利用者に対して専用に作成される表です。複数の利用者から、それぞれ同一の表名で利用することができます。応用プログラムで処理中のデータの一時的な退避など、他の応用プログラムから独立した利用ができる表です。

一時表名 一時表の名前です。

インストーラ プログラムをマシンに入れるプログラムです。

インストール プログラムをマシンに入れることです。

インタプリタ 実行時にプログラムテキストの内容を解析しながら処理を行う形態の言語処理ソフトウェアです。

オブジェクト 処理と処理に付随するデータを一つのまとまりとして管理する構造の実体です。

オブジェクト思考 処理と処理に付随するデータを一つのまとまりとして管理し、プログラムを

Page 141: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

130

構造化する考え方です。

概数型 おおよその数を表すデータ型であり、FLOAT、REAL、DOUBLE PRECISIONがあります。

外部プログラム Perlスクリプトの処理から関数インタフェースやクラスインタフェースで呼び出すことができるプログラムです。

カーソル データの操作において、操作の対象とする行を指示する指示子のことを“カーソル”と呼びます。カーソルはカーソル宣言で定義します。そして、OPEN文でカーソル使用の開始を、FETCH文でカーソルの移動を、CLOSE文でカーソル使用の終了を行います。

カーソル名 カーソルの名前です。

各国語文字列型 各国語文字列を表すデータ型であり、NCHAR、NCHAR VARYINGがあります。

偽、false 偽、falseは、0、"0"または空文字列を表します。

行 表の構成要素です。リレーショナルデータベースでは、データを行と列からなる二次元の表で表現します。

クラスインタフェース 処理と処理に付随するデータを一つのまとまりとして管理しているものに対し、処理の呼び出しや処理に付随するデータを参照、設定する方法を規定したものです。

警告の発行 軽微なエラーが発生したことを通知することです。

コミット 処理中のトランザクションのデータ操作の有効化をコミットと呼びます。ト

Page 142: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

131

ランザクションの中でのデータ操作が実際にデータベースに反映されます。コミットは、応用プログラムが意図的にCOMMIT文を発行することで制御します。 関連用語:ロールバック

関数インタフェース 処理を行う関数を呼び出す方法を規定したものです。

位取り 一部の真数型、概数型に指定するデータの小数部の長さです。

コマンドプロンプト Windowsの操作を対話的に行うソフトウェアで、[スタート]-[プログラム(P)]-[コマンドプロンプト]で起動することができます。

時間隔型 時間の間隔(たとえば、10年と10ヶ月間)を表すデータ型であり、INTERVAL YEAR、INTERVAL MONTH、INTERVAL DAY、INTERVAL HOUR、INTERVAL MINUTE、INTERVAL SECOND、INTERVAL YEAR TO MONTH、INTERVAL DAY TO HOUR、INTERVAL DAY TO MINUTE、INTERVAL DAY TO SECOND、INTERVAL HOUR TO MINUTE、INTERVAL HOUR TO SECOND、INTERVAL MINUTE TO SECONDがあります。

システム表 Symfoware/RDBの利用者が定義したデータベースやスキーマなどの定義情報を管理する表です。RDBディクショナリと呼ぶこともあります。

システム表名 システム表の名前です。

自動的にコミット SQL文の実行後に自動的にコミットすることです。

シフトJIS JISコードをもとに半角カナを1バイト、日本語を2バイトで表現した文字コード系です。

真数型 正確な数を表すデータ型であり、INTEGER、SMALLINT、NUMERIC、DECIMALがあります。

Page 143: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

132

真、true 0以外の値(一般には1であることが多いです、また特殊なtrueとして0E0があります)です。

スキーマ データベースを構成する要素です。Symfoware/RDBでは、情報分析システム分析技法AA/BRMODELLINGを利用してデータ分析を行って、表またはビュー表を作成します。これらの表の集まりを“スキーマ”と定義します。

スキーマ名 スキーマの名前です。

ステートメントハンドル SQL文を準備して獲得したオブジェクトです。

正規表現 文字列を照合するためのパターン文字列です。

精度 一部の真数型、概数型に指定するデータの整数部と小数部を合わせた長さです。

属性 オブジェクトの状態を表す値のことです。

探索条件 SQL文でデータベースの操作対象の行を特定するために指定する条件です。

データ型 SQLのデータ型であり、文字列型、各国語文字列型、真数型、概数型、日時型、時間隔型があります。

データソース名 接続するデータベースの情報をDBIに渡すための文字列であり、"dbi:ドライバ名:DBDに渡す文字列"です。

データベース(1) 大量のデータを効率的に格納、検索するソフトウェアです。

Page 144: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

133

データベース(2) RDBシステム内に配下に作成する論理的な構造で、配下にデータベーススペース、スキーマなどが定義されます。

データベースアクセスで影響を受けた行数 データベースに対する操作によって操作された行数です。

データベーススペース 実表やインデックスを格納する領域を“データベーススペース”と呼びます。データベーススペースの作成は、物理構造定義で行います。

データベーススペース名 データベーススペースに対して付ける名前です。

データベースのアクセス データベースに対する操作を行うことです。

データベースハンドル データベースに接続して獲得したオブジェクトです。

データベースベンダ データベースシステムを提供する会社または団体です。

データベース名(2) データベースの名前です。

動的パラメタ 問合せ指定、INSERT文、UPDATE文:探索、DELETE文:探索、CALL文に指定するクエスチョンマーク(?)です。

動的パラメタのデータ型 動的パラメタのデータ型は、問合せ指定、INSERT文、UPDATE文:探索、DELETE文:探索に指定するクエスチョンマーク“?”に対応した列のデータ型です。

ドライバハンドル DBIをロードして獲得したオブジェクトです。

トレース DBIやDBDの内部情報を出力することです。

Page 145: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

134

日時型 日、時間、日時を表すデータ型であり、DATE、TIME、TIMESTAMPがあります。

パッケージ Sun OSでソフトウェアを提供する形態です。

ハッシュ “連想配列”を参照してください。

ハンドル 獲得したオブジェクトを指す別称です。

ハンドルの警告の発行 ハンドルの処理内で軽微なエラーが発生したことを通知することです。

ビュー表 スキーマ配下に作成する論理的な構造で、表の一部の列と対象の行を特定するための条件で構成されています。

ビュー表名 ビュー表の名前です。

表 リレーショナルデータベースでは、データを行と列からなる二次元の表で表現しています。表には、実表とビュー表の2種類があります。

表名 表に付けた名前です。表名は、スキーマ定義で設定します。そして、データ操作のSQL文で、操作の対象とする表を指定するために使用します。

ビルド ソースで提供されたPerlやPerlモジュールをコンパイルおよびリンクすることです。

フェッチ データベースの内容を行ごとに読み込むことです。

不定、undef 値が設定されていない状態を表します。

Page 146: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

135

部分文字列 文字列から任意の範囲で一部の文字列を取り出したものです。

プロシジャルーチン SQLによるデータベースの処理手続きの定義体をプロシジャルーチンと呼びます。

プロシジャルーチン名 プロシジャルーチンの名前です。

ホスト名 Symfoware/RDBにリモートアクセスする場合において、マシン名からIPアドレスを解決できる場合はマシン名、マシン名からIPアドレスを解決できないならばIPアドレス(xxx.xxx.xxx.xxxの形式)です。

ポート番号 Symfoware/RDBにリモートアクセスする場合において、サーバマシン側で設定したTCP/IP通信を受け付ける番号で、1025から65535までの数値です。

メソッド オブジェクトの処理のことです。

文字列型 文字列を表すデータ型であり、CHAR、CHAR VARYINGがあります。

例外の発行 重度のエラーが発生したことを通知することです。

列 表の構成要素です。リレーショナルデータベースでは、データを行と列からなる二次元の表で表現しています。

連想配列 複数の値を名前で対応付けて値を保持する変数です。

ログイン SolarisまたはLinuxのマシンの操作を開始することです。

Page 147: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

136

ログオン Windowsのマシンの操作を開始することです。

ロールバック 処理中のトランザクションのデータ操作の無効化をロールバックと呼びます。ロールバックには、データ操作のSQL文単位のロールバックと、トランザクション単位のロールバックの2つがあります。代表的なものでは、前者には、データ操作の例外状態の発生、後者には、応用プログラムが意図したROLLBACK文の発行があります。 関連用語:コミット

プレースホルダ “動的パラメタ”を参照してください。

選択リスト 問合せ指定で指定する検索する列の並びです。

マウント CDを読み込むことができるようCD-ROM装置を接続することです。

マルチバイト文字 複数バイトで1文字を表す文字で、EUC(Extended UNIX Code)、シフトJIS、UTF-8などがあります。

マルチバイト文字の泣き別れ マルチバイト文字の泣き別れは、マルチバイト文字列の途中以降を切り捨てるときにマルチバイトの途中のバイトで切ったときの状態です。

マルチバイト文字列 マルチバイト文字からなる文字列です。

文字列長(1) SQLにおいて、文字列型ではパイト数、各国語文字列型では文字数です。

文字列長(2) バイト数です。

Active Perl CPANで公開されているPerlソースを元に、Windowsの文化(たとえば、イン

Page 148: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

137

ストーラ形式による提供、拡張子の関連付け)に合わせた機能を付加したPerlです。

Active State Active Perlを開発、公開している団体です。

BLOB型(BINARY LARGE OBJECT型) 大きいバイナリデータを表すデータ型です。

CLI(Call Level Interface) Cプログラムから関数インタフェースでデータベースアクセスを行うインタフェースです。

CPAN(Comprehensive Perl Archive Network:統合アーカイブネットワーク) PerlソースやPerlに関する質問をなどをWebで公開し、Perlの普及に努めている団体です。

DBD::Symfoware(Database Driver for Symfoware) DBIの先でSymfoware/RDB固有のデータベースアクセスの処理を行います。

DBI(Database Interface) 各データベースベンダのデータベースアクセスを一つのクラスインタフェースで行うために考案されたデータベースインタフェースです。

dbish 対話的にSQL文を実行するコマンドです。

EUC(Extended UNIX Code) UNIXで使用されるマルチバイトの文字コード系です。

false “偽、false”を参照してください。

GPL(GNU General Public License:一般公的使用承諾) PerlやPerlに関する製品の公開について定めたもので、製品を使用する自由や製品に動作保証がないことなどが規定されています。

JPerl シフトJISコードの文字列中に2バイト目に16進数で0x5c(¥)の文字を含む

Page 149: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

138

場合、Perlの構文エラーとなる問題があります。JPerlは、この問題を解決するために、日本の有志によって開発、公開しているPerlです。

LIKE述語 SQL文の探索条件に指定し、文字列型、各国語文字列型の列と照合文字列との比較を行います。

NULL 表中の行について、ある列のデータの値が未定義である状態をNULLとよびます。

NULLを持つ可能性 データベースの列の値が不定になることがあることを表します。

ODBC(Open Database Connectivity) プログラミング言語の関数インタフェースでデータベースをアクセスする規約としてCLI(Call Level Interface)があります。ODBCは、MicrosoftがCLIの規約を元に関数インタフェースでさまざまなデータベースにアクセスできるよう提唱した規格で、Windowsマシンに実装されています。

Perl(Practical Extraction and Report Language:実用データ取得レポート作成言語)

インタプリタ型のプログラミング言語です。

Perl 5 オブジェクト思考の概念が追加された、最新のPerlの総称です。

Perl 5.005_03 Perl 5.6.1より一世代古いPerlです。

Perl 5.6.1 最新のPerlです。

Perlスクリプト Perlが処理するプログラムです。

Perlモジュール Perlスクリプトから関数インタフェースやクラスイン タフェースで呼び出す外部モジュールです。

Page 150: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

139

PPM(Perl Package Manager) Active Perlに対し、コンパイル済みのPerlモジュールをインストールするソフトウェアです。

RDBコマンド Symfoware/RDBのシステム管理の操作を行うコマンドです。

Solaris Package Archive 有志によってフリーソフトをSolarisマシン上でコンパイルしてパッケージ形式にしたものをWebで公開しているホームページです。

SQLCODE 過去のSQLインタフェースで、データベースアクセスのエラーコードを表します。

SQLSTATE データベースアクセスの状態を5バイトの文字で表し、正常な場合は"00000"です。

SQLMSG データベースアクセスのエラーメッセージの文字列です。

SQL文 データベースをアクセスするための文です。

SQLデータ型名 データベースで扱うことができるデータ型に対して一意な名前を付けたものです。

SQLデータ型名のインポート データ型の一意な名前をPerlに取り込むことです。

SQLデータ型番号 データベースで扱うことができるデータ型に対して一意な番号を付けたものです。

SQL文の準備 SQL文を繰り返し実行できるよう準備することです。

Page 151: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

140

Symfoware Symfowareは、高性能で高信頼なデータベースエンジンを持ち、インターネットビジネス時代のミッションクリティカルシステムおよび戦略的な情報活用の支援に適したデータベースシステムです。

Symfoware/RDB Symfoware ServerとSymfoware Clientの総称です。

Symfoware/RDBにリモートアクセス データベースアクセスを依頼するマシンが他のマシンのSymfoware/RDBに接続することです。

Symfoware/RDBにローカルアクセス データベースアクセスを依頼するマシンが同一のSymfoware/RDBに接続することです。

Symfoware Server Symfoware/RDBのデータベースアクセスの依頼を受け付けるサーバソフトウェアです。

Symfoware Client Symfoware/RDBのデータベースアクセスの依頼を行うクライアントソフトウェアです。

true “真、true”を参照してください。

UNIXマシン UNIXのOSがインストールされたマシンです。

undef “不定、undef”を参照してください。

UTF-8 世界の各国語文字を統一的に扱うことができるマルチバイトの文字コード系であるUnicodeの規格の一つです。

Windowsマシン WindowsのOSがインストールされたマシンです。

Page 152: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

用語集

141

$ 変数名の先頭の$は、単一の値を保持することを表します。

% 変数名の先頭の%は、複数の値を名前で対応付けて値を保持する(連想配列と呼びます)ことを表します。

@ 変数名の先頭の@は、複数の値を配列で保持することを表します。

¥$ 変数名の先頭の¥@は、メソッドの引数で値の配列への参照を渡すことを表します。

¥% 変数名の先頭の¥%は、メソッドの引数で値の連想配列への参照を渡すことを表します。

¥@ 変数名の先頭の¥%は、メソッドの引数で値の連想配列への参照を渡すことを表します。

Page 153: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server
Page 154: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

索引

Active......................................................49 ActiveKids..............................................53 AutoCommit...........................................88 available_drivers ...................................34 bind_col ................................................103 bind_columns .......................................103 bind_param............................................90 bind_param_inout..................................93 CachedKids ............................................53 ChopBlanks............................................56 column_info............................................75 commit....................................................70 CompatMode..........................................54 connect ...................................................31 connect_cached ......................................32 connect、connect_cachedのパラメタの記述形式 ............................................123

CursorName.........................................110 data_sources ..........................................35 DBD::Symfoware 1.00 .........................125 DBD::SymfowareによるデータベースアクセスとRDBコマンドの呼び出しの混在不可 ............................................119

DBD::Symfowareのインストール ....12, 17 DBD::Symfowareの開発経緯 ...............127 DBD::Symfowareの公開形態 ...................3 DBD::Symfowareの修正履歴 ...............125 DBD::Symfowareの制限.......................118 DBD::Symfowareのソースの構成 ........127 DBD::SymfowareをPPM(Perl Package

Manager)でインストールする場合...17 DBD::Symfowareをビルドしてインストールする場合 .......................................17

dbdimp.c...............................................127 DBI::err ..................................................41 DBI::errstr..............................................42 DBI::looks_like_number ........................39 DBI::neat................................................38

DBI::neat_list.........................................39 DBI::neat_maxlen..................................44 DBI::rows ...............................................43 DBI::state...............................................43 DBI、DBD::Symfoware...........................3 DBI・DBD::Symfowareスクリプト例 ...28 DBI、DBD::Symfowareとは....................3 DBI・DBD::Symfowareの概要 ..............28 DBI・DBD::Symfowareの仕様 ..............27 DBI、DBD::SymfowareをPPM(Perl

Package Manager)でインストールする場合のコンパイラのインストール ...14

DBI、DBD::Symfowareをビルドしてインストールする場合のコンパイラのインストール ..........................................14

dbishの実行 ............................................21 dbishの実行例.........................................22 dbishの注意事項 .....................................22 DBIクラス属性 .......................................41 DBIクラスメソッド ................................31 DBIでのマルチバイト文字の扱い.........121 DBIのインストール .......................... 11, 16 DBIモジュールロード ............................30 DBIユーティリティ関数 .........................38 DBIをPPM(Perl Package Manager)でインストールする場合 .....................16

DBIをビルドしてインストールする場合 16 disconnect...............................................71 do ............................................................60 Driver .....................................................88 dump_results .......................................104 err...........................................................45 errstr ......................................................45 execute ...................................................94 fetchall_arrayref ....................................99 fetchall_hashref ...................................100 FetchHashKeyName .............................52 fetchrow_array.......................................96

Page 155: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

fetchrow_arrayref ..................................96 fetchrow_hashref ...................................97 finish ....................................................101 foreign_key_info.....................................80 func.........................................................47 HandleError...........................................50 InactiveDestroy .....................................54 JPerl.....................................................121 Kids ........................................................53 Linuxの場合のPerlのインストール........ 11 Linuxの場合のアーカイバのインストール...........................................................8

Linuxの場合のインストール済みパッケージ .......................................................6

Linuxの場合のインストール済みパッケージのアンインストール .......................6

Linuxの場合のコンパイラのインストール.........................................................10

LongReadLen.........................................57 LongTruncOk.........................................58 Name......................................................89 NAME ..................................................107 NAME_lc..............................................107 NAME_uc.............................................108 NULLABLE ......................................... 110 NUM_OF_FIELDS..............................106 NUM_OF_PARAMS ............................107 open2とは............................................. 115 open2を用いたRDBコマンドの呼び出し115 open2を用いたRDBコマンドの呼び出し例....................................................... 115

ParamValues........................................ 111 Perl DBI・DBD::Symfowareの概要 ........1 Perl DBI・DBD::Symfowareの規約 ......24 Perl DBI・DBD::Symfowareの仕様 ......24 Perl DBI・DBD::Symfowareの使用 ......19 Perl DBI・DBD::Symfowareの導入 ........5 Perlスクリプト、Perlモジュール、クラスインタフェース..................................2

Perlスクリプトの作成・実行..................20 Perlスクリプトの作成・実行..................20 Perlとは....................................................2 Perlのインストール .......................... 11, 15 Perlの公開形態 .........................................2

Perlのデータベースアクセスの抽象化 .....3 Perlのデータベースのアクセス ................3 ping ........................................................71 PRECISION.........................................109 prepare...................................................68 prepare_cached......................................69 primary_key...........................................79 primary_key_info...................................78 PrintError ..............................................54 private_* ................................................59 quote.......................................................85 RaiseError .............................................55 RDBコマンドに対して標準入力を送り込むときの制限 ................................. 119

RDBコマンドの呼び出し...................... 113 RDBコマンドの呼び出しとは .............. 114 RDBコマンドの呼び出しの制限 ........... 119 RDBコマンドの呼び出し方法 .............. 114 RDBコマンドの呼び出し例 .................. 115 RDBコマンドを実行するマシン ........... 114 RDBコマンドを実行するユーザ ........... 114 rollback ..................................................71 RowCacheSize........................................89 rows......................................................102 RowsInCache ....................................... 111 SCALE .................................................109 selectall_arrayref...................................64 selectall_hashref....................................65 selectcol_arrayref ..................................67 selectrow_array .....................................61 selectrow_arrayref.................................62 selectrow_hashref..................................63 set_err ....................................................46 ShowErrorStatement ............................51 Solaris2.6の場合のアーカイバのインストール ...................................................7

Solaris2.6の場合のコンパイラのインストール ...................................................8

Solaris7の場合のアーカイバのインストール .......................................................7

Solaris7の場合のコンパイラのインストール .......................................................9

Solaris8およびSolaris9の場合のコンパイラのインストール ..............................9

Page 156: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server

Solaris8の場合のアーカイバのインストール .......................................................8

Solaris9の場合のアーカイバのインストール .......................................................8

SolarisおよびLinuxの場合の導入方法 .....6 Solarisの場合のPerlのインストール ......11 SQL文の規約 ..........................................25 state........................................................45 Statement............................................. 111 Symfoware.pm .....................................127 Symfoware/RDBにリモートアクセスする場合のSymfowareのインストール...10

Symfoware/RDBにローカルアクセスする場合のSymfowareのインストール...10

Symfowareのインストール ..............10, 14 systemとは ...........................................115 systemを用いたRDBコマンドの呼び出し.......................................................115

systemを用いたRDBコマンドの呼び出し例 ...................................................115

table_info................................................72 tables ......................................................74 Taint .......................................................59 trace..................................................35, 46 TraceLevel..............................................51 trace_msg .........................................37, 47 TYPE ....................................................108 type_info.................................................83 type_info_all...........................................80 use DBI ..................................................30 UTF-8 ...................................................121 Warn.......................................................48 Windows 2000/XP、Windows Me/XPの場合のPerlのインストール..................15

Windows 95/98/Me/XPまたはWindows NT/2000/XPで、リモートの Symfoware/RDBをアクセスする場合のSymfowareのインストール .............14

Windows NT/2000/XPで、ローカルのSymfoware/RDBをアクセスする場合

のSymfowareのインストール .............15 Windows NTまたはWindows 95/98の場合のPerlのインストール .....................15

Windowsの場合の導入方法 ....................14 アーカイバのインストール .................7, 14 値式の制限 ............................................118 インストール済みパッケージのアンインストール ................................................6 偽、false .................................................25 子プロセスへのハンドル継承不可 ........118 コンパイラのインストール .................8, 14 自動コミットの動作..............................118 シフトJIS文字列の0x5cの問題 .............120 従来のデータベースのアクセス ................3 使用できるSQL文 ...................................25 真、true..................................................25 真、偽、不定 ..........................................25 ステートメントハンドル属性 ...............106 ステートメントハンドルメソッド ..........90 すべてのハンドルに共通の属性 ..............48 すべてのハンドルに共通のメソッド.......45 正規表現の問題 .....................................120 対話ツール dbish .....................................4 注意事項................................................117 停止しないRDBコマンドの呼び出し不可.......................................................119 データベースハンドル属性 .....................88 データベースハンドルメソッド ..............60 動的パラメタの制限..............................118 パラメタの記述形式..............................123 パラメタの形式 .....................................124 パラメタの種類 .....................................123 不定、undef............................................25 変数の規約 ..............................................24 マルチバイト文字列の注意 ...................120 マルチバイト文字列の問題 ...................120 文字列長の制限 .....................................118 文字列長、部分文字列の問題 ...............120 列名の取得の制限 .................................118

Page 157: Symfoware(R) Server Perlドライバユーザーズガイド · Windows 2000/XP Microsoft® Windows® 2000 Professional operating system、 Microsoft® Windows® 2000 Advanced Server