第4章 DBI・DBD::Symfowareの仕様
4.7 すべてのハンドルに共通の属性
4.7 すべてのハンドルに共通の属性
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" ;
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" ;
4.7 すべてのハンドルに共通の属性
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は、トレースレベルを設定または参照します。
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"が返却されます。
4.7 すべてのハンドルに共通の属性
例
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で作成したデータベー スハンドルの連想配列への参照を返却します。またはデータベースハンドルか
ら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を指定してください。
4.7 すべてのハンドルに共通の属性
戻り値
強制的に警告を発行させる場合、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" ;
$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 ) {
4.7 すべてのハンドルに共通の属性
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" ;
}
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 の 例 を参照してください。