埋め込み SQL で使用される変数です。
Synopsis
%msql "name"
%ROWCOUNT
SQLCODE
概要
以下の変数には、埋め込み SQL で特殊な使用方法があります。
%msql
この変数を Caché ObjectScript 内に設定して、埋め込み SQL からの SQL アクセスに対する有効なユーザ名を指定します。有効なユーザ名が User Table 内に 1 つ登録されます。
%msql 変数は、すべての CREATE TABLE 文、CREATE VIEW 文、GRANT 文、または REVOKE 文の前に有効な SQL ユーザに設定される必要があります。CREATE TABLE および CREATE VIEW に対しては、有効なユーザ名はテーブルまたはビューの所有者を設定するためにのみ必要となります。GRANT および REVOKEに対しては、特権の変更を行っているユーザが許可を持っていることを確認するために必要です。
有効な %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)
認証 ID を設定するには、以下を実行します。
  DO setaid^%msql("name")
%ROWCOUNT
それぞれの 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
SQLCODE 変数は、埋め込み SQL から返されると Caché SQL エラー・コード値を返します。詳細は、このドキュメントの "SQL エラー・コード" を参照してください。