Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Perl クライアント・クラス・リファレンス

この章では、Caché のクラスとデータ型が Perl コードにどのようにマッピングされるかについて説明します。また、Caché Perl バインディングでサポートされているクラスとメソッドについても詳しく説明します。ここで説明する内容は以下のとおりです。

  • データ型%BinaryOpens in a new tab データおよび Null のサポート。

  • 接続 — Caché データベースのネームスペースへ物理的に接続するためのメソッド。

  • データベース — Caché オブジェクトのオープンと作成、クエリの作成、および Caché クラス・メソッドの実行に使用するメソッド。

  • オブジェクト — プロパティの取得と設定、オブジェクト・メソッドの実行、オブジェクトに関する情報の取得など、Caché オブジェクトを操作するためのメソッド。

  • クエリ — クエリを実行し、その結果を取得するためのメソッド。

  • 時刻と日付 — Caché の %TimeOpens in a new tab データ型、%DateOpens in a new tab データ型、%Timestamp データ型にアクセスするためのメソッド。

  • ロケールとクライアント・バージョン — Caché のバージョン情報と Windows のロケール設定にアクセスするためのメソッド。

データ型

Caché のすべてのデータ型がサポートされています。個々のデータ型の詳細は、この後のセクションを参照してください。

制約

場合によっては、Caché 言語バインディング・エンジンによって Perl の変数が、Caché のデータ型に正確に一致しない中間データ型にマッピングされることがあります。この場合、処理の効率は高まりますが、そのデータ型の使用法に若干の制限が適用されます。詳細は、"Perl バインディングの制約と制限" を参照してください。

NULL のサポート

Perl バインディングでは、Perl undef が Caché の NULL (つまり、"") に相当します。Perl には空文字列の概念はありますが、Perl バインディングは、これを Caché の NULL として解釈しません。

接続

Intersys::PERLBIND::Connection パッケージのメソッドは、Caché データベースのネームスペースへ物理的に接続します。Connection オブジェクトは、Database オブジェクトを作成する目的でのみ使用されます。 オブジェクトは、Perl バインディング・アプリケーションから Caché オブジェクトを操作可能にする論理接続です。Connection メソッドの使用方法については、"Caché データベースへの接続" を参照してください。

以下は、Connection のメソッド一覧です。

new()
$conn = Intersys::PERLBIND::Connection->new($url, $user, $pwd, $timeout) 

パラメータの詳細は、この後の "接続情報" を参照してください。

new_secure()
$conn = Intersys::PERLBIND::Connection->new_secure($url, $srv_principal,
    $security_level, $timeout)

Connection->new_secure() は接続プロキシを返します。このプロキシを使用して、$url で識別される Caché ネームスペースのプロキシを取得します。このメソッドには以下のパラメータを指定します。

  • $url — URL 形式の詳細は、後述の "接続情報" を参照してください。

  • $srv_principal — Kerberos の "プリンシパル" は Kerberos データベースで使用される ID であり、Kerberos KDC (鍵配布センター) とのみ共有される永続秘密鍵を所有します。さらに、資格情報が割り当てられ、Kerberos 認証プロトコルに関与することができます。

    • "ユーザ・プリンシパル" はユーザに関連付けられ、サービスに対する認証に使用することで、リソース (コンピュータ・アカウントや Caché サービスなど) の使用が承認されます。

    • "サービス・プリンシパル" はサービスに関連付けられ、ユーザ・プリンシパルを認証するために使用されます。また必要に応じ、ユーザ・プリンシパルに対してサービス・プリンシパル自体を認証することもできます。

    • "サービス・プリンシパル名" ($srv_principal_name など) は、サービス・プリンシパルの名前の文字列表現で、慣習的に以下の形式が使用されています。

      <service>/<instance>@<REALM>

      以下はその例です。

      cache/turbo.iscinternal.com@ISCINTERNAL.COM

    Windows の場合、KDC はドメイン・コントローラに組み込まれ、サービス・プリンシパル名はドメイン・アカウントに関連付けられます。

    プリンシパルの詳細は、お使いのシステムの Kerberos ドキュメントを参照してください。

  • $security_level — "接続のセキュリティ・レベル" を設定します。これは、要求されたクライアント/サーバ・ネットワーク・セキュリティ・サービスを示す整数です。セキュリティ・レベルには以下の値を指定できます。

    • 0 — なし。

    • 1 — Kerberos クライアント/サーバ相互認証。データは保護されません。

    • 21 と同じ。さらに、データ・ソースとコンテンツの整合性が保護されます。

    • 32 と同じ。さらに、データが暗号化されます。

  • $timeout — タイムアウトになるまで待機する秒数。

接続情報

Caché データベースに接続するには、以下の情報が必要です。

  • URL — アクセスするサーバとネームスペースを文字列として指定します。形式は次のとおりです。

    <address>[<port>]:<namespace>
    

    例えば、サンプル・プログラムは以下の接続文字列を使用します。

    "localhost[1972]:Samples"
    

    この文字列の構成要素は以下のとおりです。

    • <address> — サーバの TCP/IP アドレス、または完全修飾されたドメイン名 (FQDN)。サンプル・プログラムでは "localhost" (127.0.0.1) が使用されます。この場合、サーバと Perl アプリケーションが同一マシン上に配置されているものとします。

    • <port> — この接続のサーバ TCP/IP ポート番号。IP アドレスとポートの組み合わせにより、一意な Caché サーバが指定されます。

    • <namespace> — 使用するオブジェクトが含まれている Caché ネームスペース。このネームスペースでは、Caché システム・クラスをコンパイルしておく必要があります。また、操作の対象となるオブジェクトはこのネームスペースに含まれている必要があります。サンプル・プログラムでは、SAMPLE ネームスペースのオブジェクトが使用されます。

  • username — 接続を行うユーザの名前。サンプル・プログラムでは、"_SYSTEM" (SQL システム・マネージャの既定のユーザ名) が使用されます。

  • password — 指定したユーザ名に関連付けられているパスワード。サンプル・プログラムでは既定の "SYS" が使用されます。

データベース

Database オブジェクトは、Caché ネームスペースへの論理接続を可能にします。Intersys::PERLBIND::Database パッケージのメソッドは、Caché オブジェクトのオープンまたは生成、クエリの作成、および Caché クラス・メソッドの実行に使用します。Database オブジェクトは、Database->new() メソッドで生成します。Database オブジェクトの作成方法の詳細は、"Caché データベースへの接続" を参照してください。

以下は、Database のメソッド一覧です。

alloc_query()
$query = $database->alloc_query()

新しい Query オブジェクトを作成します。Query オブジェクト・メソッドの詳細は、"クエリ" を参照してください。

create_new()
$obj = $database->create_new($type, $init_val) 

$type によって指定されたクラスから、新しい Caché オブジェクト・インスタンスを作成します。通常、$init_val"" です。このメソッドで作成されたオブジェクトの詳細は、"オブジェクト" を参照してください。

new()
$database = Intersys::PERLBIND::Database->new($conn)

Caché ネームスペースへの論理接続を可能にする Database オブジェクトを生成します。Connection オブジェクト $conn は、Database オブジェクトがアクセスするネームスペースへの物理接続を提供します。

open()
$obj = $database->open($class_name, $oid, $concurrency, $timeout, $res) 

$class_name で指定されたクラスとオブジェクトの OID を使用して、Caché オブジェクトのインスタンスを開きます。$concurrency 引数には -1 の既定値があります。$timeout は ODBC クエリのタイムアウトです。

openid()
$obj = $database->openid($class_name, $id, $concurrency, $timeout) 

$class_name で指定されたクラスとオブジェクトの ID を使用して、Caché オブジェクトのインスタンスを開きます。$concurrency 引数には -1 の既定値があります。$timeout は ODBC クエリのタイムアウトです。

run_class_method()
$value = $database->run_class_method($class_name, $method_name, LIST) 

クラス・メソッド $method_name を実行します。$method_name は、$database の接続先となるネームスペースにある $class_name クラスのメンバです。引数は LIST として渡されます。Caché のクラス定義によっては、一部の引数を参照で渡すこともできます。返り値は、Caché メソッドの返り値と同じです。

オブジェクト

Intersys::PERLBIND::Object パッケージのメソッドは、Caché オブジェクトへのアクセスを可能にします。Object オブジェクトは、Intersys::PERLBIND::Database create_new() メソッドによって作成されます (詳細は、"データベース" を参照)。Object のメソッドの使用方法については、"Caché Object メソッドの使用法" を参照してください。

以下は、Object のメソッド一覧です。

get()
$value = $object->get($prop_name)

Caché オブジェクト $object のプロパティ $prop_name の値を返します。

get_methods()
@methodlist = $object->get_methods(); 
$methodcount = $object->get_methods(); 

リスト・コンテキストでは、Caché オブジェクト $object のメソッド名を含むリストを返します。スカラ・コンテキストでは、$object のメソッド数を返します。

get_properties()
@proplist = $object->get_properties(); 
$propcount = $object->get_properties();

リスト・コンテキストでは、Caché オブジェクト $object のプロパティ名を含むリストを返します。スカラ・コンテキストでは、$object のプロパティ数を返します。プライベート・プロパティと多次元プロパティは返されず、Perl バインディングからはアクセスできません。

is_method()
$bool = $object->is_method($name);

$name$object の有効なメソッド名の場合は 1 を、それ以外の場合は 0 を返します。

is_property()
$bool = $object->is_property($name);

$name$object の有効なプロパティ名の場合は 1 を、それ以外の場合は 0 を返します。

run_obj_method()
$value = $object->run_obj_method($method_name, LIST) 

Caché オブジェクト $object のメソッド $method_name を実行します。引数は LIST として渡されます。Caché のクラス定義によっては、一部の引数を参照で渡すこともできます。返り値は、Caché メソッドの返り値と同じです。

set()
$object->set($prop_name, $val)

Caché オブジェクト $object のプロパティ $prop_name$val に設定します。

クエリ

Intersys::PERLBIND::Query パッケージのメソッドによって、クエリの作成、パラメータの設定、クエリの実行、および結果の取得が可能になります。Query オブジェクトは、Intersys::PERLBIND::Database alloc_query() メソッドによって作成されます (詳細は、"データベース" を参照)。Query のメソッドの使用方法は、"クエリの使用法" を参照してください。

以下は、Query のメソッド一覧です。

クエリの作成

prepare()
$query->prepare($string, $sqlcode)

$string の SQL 文字列を使用してクエリを作成します。

prepare_class()
$query->prepare_class($class_name, $query_name, $sqlcode)

クラス定義にクエリを作成します。

パラメータの設定

set_par()
$query->set_par($idx, $val)

パラメータ $idx に値 $val を割り当てます。このメソッドは、同じパラメータに対して複数回呼び出すことができます。その場合、以前のパラメータ値は失われます。新しい値は別の型でもかまいません。set_par() メソッドは、パラメータの参照渡しをサポートしていません。

is_par_nullable()
$nullable = $query->is_par_nullable($idx)

パラメータ $idx が NULL 対応の場合は 1 を、そうでない場合は 0 を返します。

is_par_unbound()
$unbound = $query->is_par_unbound($idx)

パラメータ $idx が未結合の場合は 1 を、そうでない場合は 0 を返します。

num_pars()
$num = $query->num_pars()

クエリ内のパラメータ数を返します。

par_col_size()
$size = $query->par_col_size($idx)

パラメータ列のサイズを返します。

par_num_dec_digits()
$num = $query->par_num_dec_digits($idx)

パラメータの小数桁数を返します。

par_sql_type()
$type = $query->par_sql_type($idx)

パラメータの SQL 型を返します。

クエリの実行

execute()
$query->execute($sqlcode)

set_par() の呼び出しで定義されているパラメータを使用して、結果セットを生成します。

結果の取得

fetch()
@data_row = $query->fetch($sqlcode)
$column_count = scalar($query->fetch($sqlcode))

リスト・コンテキストで実行した場合、このメソッドは結果セットからデータ行を取得し、それをリストとして返します。取得するデータがない場合は、空のリストが返されます。

スカラ・コンテキストで実行した場合、このメソッドは、1 行の列数を返します。

col_name()
$name = $query->col_name($idx)

列の名前を返します。

col_name_length()
$length = $query->col_name_length($idx)

列名の長さを返します。

col_sql_type()
$sql_type = $query->col_sql_type($idx)

列の SQL 型を返します。

num_cols()
$num_cols = $query->num_cols()

クエリ内の列数を返します。

時刻と日付

PTIME_STRUCTPtrPDATE_STRUCTPtr、および PTIMESTAMP_STRUCTPtr の各パッケージは、それぞれ Caché の %TIME データ型、%DATE データ型、および %TIMESTAMP データ型の操作に使用します。

%TIME

PTIME_STRUCTPtr パッケージのメソッドは、Caché の %DATE データ構造の操作に使用します。時刻は hh:mm:ss 形式で表されます。例えば、午前 0 時 5 分 30 秒過ぎは 00:05:30 と表されます。以下は、Time のメソッド一覧です。

new()
$time = PTIME_STRUCTPtr->new()

新しい Time オブジェクトを生成します。

get_hour()
$hour = $time->get_hour()

時を返します。

get_minute()
$minute = $time->get_minute()

分を返します。

get_second()
$second = $time->get_second()

秒を返します。

set_hour()
$time->set_hour($hour)

時を設定します (0 ~ 23 の整数。0 は午前 0 時)。

set_minute()
$time->set_minute($minute)

分を設定します (0 ~ 59 の整数)。

set_second()
$time->set_second($second)

秒を設定します (0 ~ 59 の整数)。

toString()
$stringrep = $time->toString()

時刻を hh:mm:ss 形式の文字列に変換します。

%DATE

PDATE_STRUCTPtr パッケージのメソッドは、Caché の %DATE データ構造の操作に使用します。日付は yyyy-mm-dd 形式で表されます。例えば、2003 年 12 月 24 日は 2003-12-24 と表されます。以下は、Date のメソッド一覧です。

new()
$date = PDATE_STRUCTPtr->new()

新しい Date オブジェクトを生成します。

get_year()
$year = $date->get_year()

年を返します。

get_month()
$month = $date->get_month()

月を返します。

get_day()
$day = $date->get_day()

日を返します。

set_year()
$date->set_year($year)

年を設定します (4 桁の整数)。

set_month()
$date->set_month($month)

月を設定します (1 ~ 12 の整数)。

set_day()
$date->set_day($day)

日を設定します (1 ~ 各月の日数までの整数)。

toString()
$stringrep = $date->toString()

日付を yyyy-mm-dd 形式の文字列に変換します。

%TIMESTAMP

PTIMESTAMP_STRUCTPtr パッケージのメソッドは、Caché の %TIMESTAMP データ構造の操作に使用します。タイムスタンプは、yyyy-mm-dd<space>hh:mm:ss.fffffffff 形式で表されます。例えば、2003 年 12 月 24 日、午前 0 時 5 分 12.5 秒過ぎのタイムスタンプは以下のように表されます。

2003-12-24 00:05:12:500000000

以下は、TimeStamp のメソッド一覧です。

new()
$timestamp = PTIMESTAMP_STRUCTPtr->new()

新しい Timestamp オブジェクトを生成します。

get_year()
$year = $timestamp->get_year()

yyyy 形式で年を返します。

get_month()
$month = $timestamp->get_month()

mm 形式で月を返します。

get_day()
$day = $timestamp->get_day()

dd 形式で日を返します。

get_hour()
$hour = $timestamp->get_hour()

hh 形式で時を返します。

get_minute()
$minute = $timestamp->get_minute()

mm 形式で分を返します。

get_second()
$second = $timestamp->get_second()

ss 形式で秒を返します。

get_fraction()
$fraction = $timestamp->get_fraction()

fffffffff 形式で秒の小数部分を返します。

set_year()
$timestamp->set_year($year)

年を設定します (4 桁の整数)。

set_month()
$timestamp->set_month($month)

月を設定します (1 ~ 12 の整数)。

set_day()
$timestamp->set_day($day)

日を設定します (1 ~ 各月の日数までの整数)。

set_hour()
$timestamp->set_hour($hour)

時を設定します (0 ~ 23 の整数。0 は午前 0 時)。

set_minute()
$timestamp->set_minute($minute)

分を設定します (0 ~ 59 の整数)。

set_second()
$timestamp->set_second($second)

秒を設定します (0 ~ 59 の整数)。

set_fraction()
$timestamp->set_fraction($fraction)

秒の小数部分を設定します (最大 9 桁の整数)。

toString()
$stringrep = $timestamp->toString()

タイムスタンプを yyyy-mm-dd hh:mm:ss.fffffffff 形式の文字列に変換します。

ロケールとクライアント・バージョン

Intersys::PERLBIND 既定パッケージのメソッドは、Caché バージョン情報と Windows ロケール設定へのアクセスに使用します。以下は、これらのメソッドの一覧です。

get_client_version()
$clientver = Intersys::PERLBIND::get_client_version();

Perl クライアント・マシン上で実行されている Caché のバージョンを確認します。

setlocale()
$newlocale = Intersys::PERLBIND::setlocale($category, $locale)

既定のロケールを設定し、新しいロケールのロケール文字列を返します。以下はその例です。

   $newlocale = Intersys::PERLBIND::setlocale(0, "Russian") # 0 stands for LC_ALL

これは、すべてのロケール・カテゴリを Russian に設定し、以下の文字列を返します。

   Russian_Russia.1251

$locale 引数が空文字列の場合は、現在の既定のロケール文字列が返されます。例えば、以下のコードを指定したとします。

   Intersys::PERLBIND::setlocale(0, "English")
   $mylocale = Intersys::PERLBIND::setlocale(0, ""),"\n";

$mylocale の値は、以下のようになります。

   English_United States.1252

有効な $category 値を含む使用法の詳細は、MSDN ライブラリ (http://www.microsoft.com/japan/msdn/library)Opens in a new tab で、Visual C++ ランタイム・ライブラリの setlocale() 関数の説明を参照してください。

set_thread_locale()
Intersys::PERLBIND::set_thread_locale($lcid)

呼び出しスレッドのロケール ID (LCID) を設定します。実行時にロケールとの連係を必要とするアプリケーションは、このメソッドを呼び出して正しい変換を行う必要があります。これは現在のスレッド内で C++ ランタイム・ライブラリから setlocale() を呼び出すのと同じですが、setlocale() を直接呼び出すと、場合によっては例外がスローされることなく失敗することがあります。

有効な LCID 値については、MSDN ライブラリ (http://www.microsoft.com/japan/msdn/libraryOpens in a new tab) にある "ロケール ID (LCID) の一覧" を参照してください。"LCID 一覧" で検索すると、この一覧が表示されます。現在の場所は以下のとおりです。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/vsmsclcid.aspOpens in a new tab

ロケール設定の詳細は、MSDN ライブラリで、"National Language Support" の SetThreadLocale() 関数を参照してください。

FeedbackOpens in a new tab