• 検索結果がありません。

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

第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 の 例 を参照してください。