埋め込み SQL で使用される変数です。
Synopsis
%msql "name"
%ROWCOUNT
SQLCODE
以下の変数には、埋め込み SQL で特殊な使用方法があります。
この変数を Caché ObjectScript 内に設定して、埋め込み SQL からの SQL アクセスに対する有効なユーザ名を指定します。有効なユーザ名が User Table 内に 1 つ登録されます。
有効な %msql 値の指定に失敗すると、SQLCODE=-99 (特権違反) エラーとなります。
Caché SQL システムのスーパーユーザ名は、
"_SYSTEM" です。これは、すべての特権を与えます。システム名
"_PUBLIC" は、テーブル作成を含む、ほとんどの特権を与えます。
以下の Caché ObjectScript の例は、%msql 変数を使用しています。
SET %msql="_SYSTEM"
&sql(CREATE TABLE Mytable(
ID INT NOT NULL,
Name CHAR(24),
CONSTRAINT MYTABPK PRIMARY KEY (ID))
)
IF SQLCODE=0 {
WRITE !,"Successful table create" }
ELSEIF SQLCODE=-99 {
WRITE !,%msql," does not have CREATE TABLE privileges"}
ELSEIF SQLCODE=-201 {
WRITE !,"Table already exists"}
ELSE {
WRITE !,"SQL error code=",SQLCODE }
QUIT
%msql 変数は、埋め込み SQL を使用する場合にのみ、直接設定されます。%msql を直接設定する場合、ユーザ名は大文字と小文字を区別します。ODBC または SQL マネージャを介してログインする場合、%msql は間接的に設定され、サーバ上で内部的に定義されます。ODBC またはダイナミック SQL を使用する場合、代わりに以下を使用します。
DO $system.SQL.Login(user,password)
このコンテキストでは、ユーザ名は大文字と小文字を区別しません。
Caché スタジオでは、テーブルを作成したユーザの %msql 名は
Owner 値として表示されます。
%msql 変数は、複数の部分から構成できます。ユーザ名は、常に最初の部分であり、$CHAR(1) 文字が構成部分の区切り文字として使用されます。
SET %msql="_SYSTEM"
SET user=$PIECE(%msql,$CHAR(1),1)
WRITE !,%msql
WRITE !,user
WRITE !,"Current SQL user is:",$GET(%msql)
それぞれの
FETCH を正常に実行した後、Caché SQL で設定された行カウンタの変数。CLOSE 時、または
FETCH が SQLCODE 100 (データがない、またはこれ以上データがない) を返すと、%ROWCOUNT は検出された行数の合計に設定されます。また、
INSERT コマンド、
UPDATE コマンド、および
DELETE コマンドも、%ROWCOUNT を、影響を受けた行数に設定します。
SET name="LastName,FirstName",state="##"
&sql(DECLARE EmpCursor CURSOR FOR SELECT Name, Home_State
INTO :name,:state FROM Sample.Person)
WRITE !,"BEFORE: Name=",name," State=",state
&sql(OPEN EmpCursor)
FOR { &sql(FETCH EmpCursor)
QUIT:SQLCODE
WRITE !,"Row fetched: ",%ROWCOUNT
WRITE " Name=",name," State=",state
}
&sql(CLOSE EmpCursor)
WRITE !,"AFTER: Name=",name," State=",state
WRITE !,"Total rows fetched: ",%ROWCOUNT
SQLCODE 変数は、埋め込み SQL から返されると Caché SQL エラー・コード値を返します。詳細は、このドキュメントの "
SQL エラー・コード" を参照してください。