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

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

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

4.8.17  column̲info

説明 

  column̲infoは、データベース中に存在するユーザが作成した表、ビュー表、

一時表の列に関する情報を得るためのステートメントハンドルへの参照を返 却します。 

構文 

$sth  =  $dbh‑>column̲info( $database̲name, $schema̲name, $table̲name, 

$column̲name ) ; 

パラメタ 

$database̲name : 

  データベース名を指定してください。 

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

$schema̲name : 

  スキーマ名を指定してください。 

  スキーマ名に検索パターン文字を指定することができます。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が設定されます。 

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

連想配列の名前  値 

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" :  

"%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" ;