コンテンツフレーム起動

Informix の場合のネイティブ SQL 文書を SAP ライブラリストラクチャに組み込む

リリース 4.0 でのネイティブ SQL インタフェースの主な新機能は、以下のとおりです。

        複数のデータベースへの同時接続が可能 ( SAP データベースを含む)

        ストアドプロシージャ用にカーソルを使用

        SAP テーブルへのアクセス

        Informix 用ネイティブ SQL 文が (ほぼ) すべて使用可能。サポートされていないネイティブ SQL 文は以下のとおりです。

分離レベル

SET ISOLATION LEVEL 命令は EXEC SQL - ENDEXEC 内だけでなく、たとえば同じデータベース接続でのオープン SQL など、後続の命令内にも継続されます。これがロックメカニズムに、悪影響を及ぼすことがあります。これを防止するため、分離レベルを DIRTY READ にリセットしてください。

また DBSL との比較ができませんので、ストアドプロシージャでは上記の命令を使用しないでください。

データ型

ネイティブ SQL とホスト変数を使用して Informix 内のマスタデータテーブルにアクセスする場合は、作業領域または LIKE 命令を使用してください。

SAP テーブルにアクセスする場合、ネイティブ SQL モジュールはABAP ディクショナリからの情報がなくても機能しますので、ABAP 変数のタイプとデータベース項目のタイプが適合していることを確認する必要があります。ネイティブ SQL モジュールは、ABAP で確保されているデータ型とメモリ領域を DBMS に開きます。これによって DBMS と直接読み書きを行うことができます。すなわちこのモジュールは多少の例外を除き、ESQL/C を使用しているのとまったく同様の働きをします。つまり、いくつかの変換は許されておらずエラーメッセージがトリガされ、丸めエラーや切詰めも起こり得ます。主要なデータ型の説明と Informix データベース用の変換については、 プログラマーズマニュアルに記載されています。

たとえばネイティブ SQL を使用して DATE 値をタイプ I ABAP 変数に変換しようとしても、システムは変換を実行することができません。

ABAP 変数とInformix データベース項目のデータ型の間のさまざまなタイプの適合性について、以下に説明します。

ネイティブ SQL モジュールで許可されサポートされているすべてのデータ型変換を、一覧で示します。望ましいデータ型の組み合わせは、 ボールドで表記されています。

データ型の組み合わせが不当な場合は、ABAP ワークベンチのエラー処理が行われ、結果として起こりうる ABAP ショートダンプのエラーコードが表示されます。ただしこのコードは、リリースによって変更される可能性があります。

この一覧に記載のない、他のデータ型の組み合わせがどのように作用するかについての正式な説明はありません。

最初のセクションではネイティブ SQL (INSERT および UPDATE) を使用して、ABAP 変数を非 SAP データベーステーブルに保存する方法を説明します。2 番目のセクションではネイティブ SQL (SELECT) を使用して、外部データベーステーブルから ABAP 変数に読み込む方法を説明します。

INSERT

ABAP 項目データ型:

         文字 C(n)

         数値テキスト N(n)

         パック数値 P(m,d)

         整数 I

         浮動小数点数 F

         日付D

         時間T

         16 進数 X(n)

SELECT

データベース列タイプ

         char

         varchar

         nchar

         text

         byte

         date

         datetime

         interval

         decimal

         numeric

         money

         smallint

         integer

         smallfloat

         float

         double precision

 

R/3 リリース 4 での Informix ネイティブ SQL の使用

 

INSERT UPDATE

ネイティブ SQL を使用して ABAP 変数から値を保存します。

以下のテーブルはそれぞれ 1 つの ABAP データ型を表します。これはデータを保存したい ABAP 変数のデータ型です。

左の列は、外部データベーステーブルのデータベース項目の SQL データ型です。

右側は ABAP ワークベンチのリアクションです。

SQL データ型DECIMAL についての説明は、MONEY および NUMERIC のデータ型についてもあてはまります。

 

ABAP データ型 C

ABAP データ型 C は、ほとんどのデータベースで複写することができます。しかし、非 CHAR 項目があるときは、丸め、切詰め、書式エラーが発生しやすいので、長さ、書式、許容値範囲に注意しなければなりません。切詰めと丸めエラーは SQL エラーとして返されません。

データベース

データ型

テストケース [注記 ]

結果

char

ABAP データ値幅 > データベース列幅

[rtrunc]

ABAP データ値幅 <= データベース列幅

OK

varchar

ABAP データ値幅 > データベース列幅

[rtrunc]

ABAP データ値幅 <= データベース列幅

OK

nchar

ABAP データ値幅 > データベース列幅

[rtrunc]

ABAP データ値幅 <= データベース列幅

OK

text

DELETE 命令、または WHERE 句のテキスト項目の場合

-615

それ以外の場合

OK

byte

 

 

-608

date

ABAP データ値に有効なデータベース日付書式がない

[undef]

ABAP データ値のデータベース日付書式は有効だが、値範囲が間違っている

-608

ABAP データ値に有効なデータベース日付書式がある

OK

datetime

ABAP データ値に有効なデータベース日付時間書式がない

-1262

ABAP データ値のデータベース日付時間書式は有効だが、値範囲が間違っている

-1218

ABAP データ値に有効なデータベース日付時間書式がある

OK

interval

ABAP データ値に有効なデータベース区間書式がない

-1264

ABAP データ値に有効なデータベース区間書式がない

-1263

ABAP データ値に有効なデータベース区間書式がある

OK

decimal

ABAP データ値が数値以外

-1213

変換時に有効数字が消失

-1226

非有効数字が消失

-1226

変換時の消失なし

OK

integer

ABAP データ値が数値以外

-1213

変換時に有効数字が消失

-1215

変換時の消失なし

OK

smallint

ABAP データ値が数値以外

-1213

変換時に有効数字が消失

-1215

変換時の消失なし

OK

float

ABAP データ値が数値以外

-1213

変換時に有効数字が消失

[round]

非有効数字が消失

[round]

変換時の消失なし

OK

smfloat

ABAP データ値が数値以外

-1213

変換時に有効数字が消失

[round]

非有効数字が消失

[round]

変換時の消失なし

OK

double precision

ABAP データ値が数値以外

-1213

変換時に有効数字が消失

[round]

非有効数字が消失

[round]

変換時の消失なし

OK

 

 

ABAP データ型 N

データベース

データ型

テストケース [注記 ]

結果

char

ABAP 項目幅 > データベース列幅

[rtrunc]

ABAP 項目幅 <= データベース列幅

ok

varchar

ABAP 項目幅 > データベース列幅

[rtrunc]

ABAP 項目幅 <= データベース列幅

ok

nchar

ABAP 項目幅 > データベース列幅

[rtrunc]

ABAP 項目幅 <= データベース列幅

ok

text

 

 

-608

byte

 

 

-608

date

 

 

-1218

datetime

interval

データベースの列タイプが 1 つの要素 (たとえば、datetime hour to hour) で構成されており ABAP 値範囲が有効

ok

それ以外の場合

-1218,-1261

decimal

変換時に数字が消失

-1226

変換時の消失なし

ok

integer

変換時に数字が消失

-1215

変換時の消失なし

ok

smallint

変換時に数字が消失

-1215

変換時の消失なし

ok

float

変換時に数字が消失

[round]

変換時の消失なし

ok

smallfloat

変換時に有効数字が消失

[round]

変換時の消失なし

ok

double precision

変換時に有効数字が消失

[round]

変換時の消失なし

ok

 

 

ABAP データ型 P

データベース

データ型

テストケース [注記 ]

結果

char

ABAP データ値幅 > データベース列幅

[rtrunc]

ABAP データ値幅 <= データベース列幅

ok

varchar

ABAP データ値幅 > データベース列幅

[rtrunc]

ABAP データ値幅 <= データベース列幅

ok

nchar

ABAP データ値幅 > データベース列幅

[rtrunc]

ABAP データ値幅 <= データベース列幅

ok

text

 

 

-608

byte

 

 

-608

date

 

 

-1218

datetime

interval

データベースの列タイプが 1 つの要素 (たとえば、datetime hour to hour) で構成されており ABAP 値範囲が有効

ok

それ以外の場合

-1218,-1261

decimal

変換時に数字が消失

-1226

変換時の消失なし

ok

integer

変換時に数字が消失

-1215

変換時の消失なし

ok

smallint

変換時に数字が消失

-1215

変換時の消失なし

ok

float

変換時に数字が消失

[round]

変換時の消失なし

ok

smallfloat

変換時に数字が消失

[round]

変換時の消失なし

ok

double precision

変換時に数字が消失

[round]

変換時の消失なし

ok

 

ABAP データ型 I

データベース

データ型

テストケース [注記 ]

結果

char

変換時に数字が消失

-1207

変換時の消失なし

ok

varchar

変換時に数字が消失

-1207

変換時の消失なし

ok

nchar

変換時に数字が消失

-1207

変換時の消失なし

ok

text

 

 

-608

byte

 

 

-608

date

 

 

-1218

datetime

interval

 

 

-1260

decimal

変換時に数字が消失

-1226

変換時の消失なし

ok

integer

変換時の消失なし

ok

smallint

変換時に数字が消失

-1214

変換時の消失なし

ok

float

変換時に数字が消失

[round]

変換時の消失なし

ok

smallfloat

変換時に有効数字が消失

[round]

変換時の消失なし

ok

double precision

変換時に有効数字が消失

[round]

変換時の消失なし

ok

 

ABAP データ型 F

データベース

データ型

テストケース [注記 ]

結果

char

変換時に数字が消失

-1207

変換時の消失なし

ok

varchar

変換時に数字が消失

-1207

変換時の消失なし

ok

nchar

変換時に数字が消失

-1207

変換時の消失なし

ok

text

 

 

-608

byte

 

 

-608

date

 

 

-1218

datetime

interval

 

 

-1260

decimal

変換時に数字が消失

-1226

変換時の消失なし

ok

integer

変換時に数字が消失

-1215

変換時の消失なし

ok

smallint

変換時に数字が消失

-1214

変換時の消失なし

ok

float

変換時の消失なし

ok

smallfloat

変換時に有効数字が消失

[round]

変換時の消失なし

ok

double precision

変換時の消失なし

ok

 

ABAP データ型 D

データベース

データ型

テストケース [注記 ]

結果

char

ABAP データ値幅 (8) > データベース列幅

[rtrunc]

ABAP データ値幅 (8) <= データベース列幅

ok

varchar

ABAP データ値幅 (8) > データベース列幅

[rtrunc]

ABAP データ値幅 (8) <= データベース列幅

ok

nchar

ABAP データ値幅 (8) > データベース列幅

[rtrunc]

ABAP データ値幅 (8) <= データベース列幅

ok

date

 

 

-1205

上記以外のデータ型

ABAP データ型 Cを参照

(上記を参照)

書式が異なるため、ABAP データ型 D Informix のデータ型 date にマッピングすることはできません。表示バリアントが異なるため、書式変換はできません。

 

ABAP データ型 T

データベース

データ型

テストケース [注記 ]

結果

char

ABAP データ値幅 (6) > データベース列幅

[rtrunc]

ABAP データ値幅 (6) <= データベース列幅

ok

varchar

ABAP データ値幅 (6) > データベース列幅

[rtrunc]

ABAP データ値幅 (6) <= データベース列幅

ok

nchar

ABAP データ値幅 (6) > データベース列幅

[rtrunc]

ABAP データ値幅 (6) <= データベース列幅

ok

datetime hour to second

 

 

-1261

上記以外のデータ型

ABAP データ型 C を参照

(上記を参照)

 

書式が異なるため、ABAP データ型 T Informix のデータ型 datetime にマッピングすることはできません。書式変換は実行されません。

 

ABAP データ型 X

データベース

データ型

テストケース [注記 ]

結果

char

ABAP データ値幅 >= 256

-609

ABAP データ値幅 < 256

ok

varchar

ABAP データ値幅 >= 256

-609

ABAP データ値幅 < 256

ok

nchar

ABAP データ値幅 >= 256

-609

ABAP データ値幅 < 256

ok

text

ABAP データ値幅 >= 256

ok

byte

ABAP データ値幅 < 256

ok

date

 

 

[undef]

datetime

 

 

[undef]

interval

 

 

[undef]

decimal

 

 

[undef]

integer

 

 

[undef]

smallint

 

 

[undef]

float

 

 

[undef]

smallfloat

 

 

[undef]

double precision

 

 

[undef]

Informix における R/3 テーブルに対するDBSL では、256 桁より短い 16 進項目を CHAR 書式で格納することができるため、ネイティブ SQL によりこれらの項目にアクセスすることができます。ABAP 変数が 256 桁より短いときは、データベース項目は CHAR として解釈されます。データベース項目の最初の 2 桁には長さの情報が入っています。

またこれは、バイト項目またはテキスト項目にアクセスするときは、ABAP 変数が 256 桁よりも長くなければならないことを意味します。

 

SELECT

ネイティブ SQL を使用してデータベース項目を読み込みます。

以下のテーブルはどれも データベース項目型を参照します。このデータベース項目型はデータベーステーブルから読み込む値のデータ型でもあります。場合によっては、複数の SQL データ型が同じように作用します。その場合、データ型はスペース節約のために 1 つのテーブルに格納されています。

左の列は、ABAP プログラム内の目標変数の ABAP データ型です。

右側は ABAPワークベンチのリアクションです。

 

データベース列型 charvarchar 、または nchar

ABAP

データ型

テストケース [注記 ]

結果

文字 C

データベースデータ値幅 > ABAP 項目幅

[rtrunc]

データベースデータ値幅 = ABAP 項目幅

ok

データベースデータ値幅 < ABAP 項目幅
[左詰め、後ろに空白]

ok

数値 N

データベースデータ値幅 > ABAP 項目幅

[rtrunc]

データベースデータ値幅 = ABAP 項目幅

ok

データベースデータ値幅 < ABAP 項目幅
[右詰め、前に先行ゼロ]

ok

パック数値 P

データベースデータ値幅 > ABAP 項目幅

[rtrunc]

データベースデータ値幅 <= ABAP 項目幅

ok

整数 I

データベースデータ値が数値以外

-1213

変換時に有効数字が消失

-1215

変換時の消失なし

ok

浮動小数点数 F

データベースデータ値が数値以外

-1213

変換時に有効数字が消失

[round]

変換時に非有効数字が消失

[round]

変換時の消失なし

ok

日付 D

データベースデータ値幅 > ABAP 項目幅 (8)

[rtrunc]

データベースデータ値幅 = ABAP 項目幅 (8)

ok

データベースデータ値幅 < ABAP 項目幅 (8)
[左詰め、後ろに空白]

ok

時間 T

データベースデータ値幅 > ABAP 項目幅 (6)

[rtrunc]

データベースデータ値幅 = ABAP 項目幅 (6)

ok

データベースデータ値幅 < ABAP 項目幅 (6)
[左詰め、後ろに空白]

ok

16 進数 X

データベースデータ値幅 > 256 > ABAP 項目幅

[rtrunc]

ABAP データ値幅 >= 256

-1269

ABAP 項目幅 < 256 かつデータベース列幅 < 256
[左詰め、 1 桁目と 2 桁目が消失]

ok

 

 

データベース項目タイプ: Text

ABAP

データ型

テストケース [注記 ]

結果

文字 C

データベースデータ値幅 > ABAP 項目幅

[rtrunc]

データベースデータ値幅 < ABAP 項目幅
[左詰め、後ろに空白]

ok

データベースデータ値幅 = ABAP 項目幅

ok

数値 N

 

 

-1269

パック数値 P

 

 

-1269

整数 I

 

 

-1269

浮動小数点数 F

 

 

-1269

日付 D

 

 

-1269

時間 T

 

 

-1269

16 進数 X

ABAP データ値幅 < 256

-1269

ABAP データ値幅 >= 256

ok

 

データベース列タイプ: Byte

ABAP

データ型

テストケース [注記 ]

結果

文字 C

ABAP データ値幅 < 256

-1269

ABAP データ値幅 >= 256

データベースデータ値幅 > ABAP 項目幅

データベースデータ値幅 < ABAP 項目幅
[左詰め、後ろに空白]

データベースデータ値幅 = ABAP 項目幅

 

[rtrunc]

ok

ok

数値 N

 

 

-1269

パック数値 P

 

 

-1269

整数 I

 

 

-1269

浮動小数点数 F

 

 

-1269

日付 D

 

 

-1269

時間 T

 

 

-1269

16 進数 X

ABAP データ値幅 < 256

-1269

ABAP データ値幅 >= 256

ok

 

データベース列タイプ: Date

ABAP

データ型

テストケース [注記 ]

結果

文字 C

ABAP データ値幅 < 10

[rtrunc]

ABAP 項目幅 > 10
[左詰め、後ろに空白]

ok

ABAP 項目幅 = 10

ok

数値 N

 

 

[undef]

パック数値 P

 

 

[undef]

整数 I

 

 

[undef]

浮動小数点数 F

 

 

[undef]

日付 D

 

 

[undef]

時間 T

 

 

[undef]

16 進数 X

 

 

-1269

 

データベース列タイプ: Date-Time または Interval

ABAP

データ型

テストケース [注記 ]

結果

文字 C

データベースデータ値幅 > ABAP 項目幅

[rtrunc]

データベースデータ値幅 < ABAP 項目幅
[必ずしも左詰め、後ろに空白とはならない]

ok

数値 N

 

 

[undef]

パック数値 P

 

 

[undef]

整数 I

 

 

-1260

浮動小数点数 F

 

 

-1260

日付 D

 

 

[undef]

時間 T

 

 

[undef]

16 進数 X

 

 

-1269

 

データベース列タイプ: DecimalNumeric または Currency

ABAP

データ型

テストケース [注記 ]

結果

文字 C

変換時に数字が消失

[rtrunc]

変換時の消失なし

ok

数値 N

変換時に数字が消失

[rtrunc]

変換時の消失なし

ok

パック数値 P

変換時に数字が消失

[rtrunc]

変換時の消失なし

ok

整数 I

変換時に数字が消失

-1215

変換時の消失なし

ok

浮動小数点数 F

変換時に数字が消失

[round]

変換時の消失なし

ok

日付 D

 

 

[undef]

時間 T

 

 

[undef]

16 進数 X

 

 

[undef]

データ型 DECIMAL をデータ型 C ABAP 項目に読み込むときは、1,000 の位の区切記号と小数点のスペースを用意する必要があります。

 

データベース列タイプ: integer またはsmallint

ABAP

データ型

テストケース [注記 ]

結果

文字 C

変換時に有効数字が消失

[rtrunc]

変換時の消失なし

ok

数値 N

変換時に有効数字が消失

[rtrunc]

変換時の消失なし

ok

パック数値 P

変換時に有効数字が消失

[rtrunc]

変換時の消失なし

ok

整数 I

変換時の消失なし

ok

浮動小数点数 F

 

 

ok

日付 D

 

 

[undef]

時間 T

 

 

[undef]

16 進数 X

 

 

[undef]

 

データベース列タイプ: SmallfloatFloat またはDouble

ABAP

データ型

テストケース [注記 ]

結果

文字 C

変換時に有効数字が消失

[rtrunc]

変換時の消失なし

ok

数値 N

変換時に有効数字が消失

[rtrunc]

変換時の消失なし

ok

パック数値 P

変換時に有効数字が消失

[rtrunc]

変換時の消失なし

ok

整数 I

変換時に有効数字が消失

-1215

変換時の消失なし

ok

浮動小数点数 F

 

 

ok

日付 D

 

 

[undef]

時間 T

 

 

[undef]

16 進数 X

 

 

[undef]

 

R/3 リリース 4 でのInformix ネイティブ SQL の使用

ABAP では、以下のネイティブSQL 文は使用できません。それらの文は以下のカテゴリに分類されます。

        NA
該当なしこれらの文は実行不可能で、エラーが発生します。

        SP
特殊な構文。これらの文では特殊なネイティブ SQL 構文が必要です。EXEC SQL のキーワード文書を参照してください。

        NR
非推奨。これらの文は ABAP ディクショナリを使用して管理される R/3 データベースでは使用しないでください。

この一覧はすべてを網羅するものではありません。単にプログラミングのガイドラインとして示すものです。ここに記載されていない Informix SQL 文は、いずれも問題なく実行できるはずです。

 

Informix SQL

クラス

ALLOCATE DESCRIPTOR

NA

ALTER FRAGMENT

NR

ALTER INDEX

NR

ALTER TABLE … MODIFY NEXT SIZE

NR

ALTER TABLE … LOCK MODE

NR

ALTER TABLE … ADD ROWIDS

NR

ALTER TABLE … DROP ROWIDS

NR

BEGIN WORK

NA

CHECK TABLE

NR

CLOSE DATABASE

NR

CONNECT

SP

CREATE AUDIT

NR

CREATE DATABASE

NR

DATABASE

NR

DEALLOCATE DESCRIPTOR

NR

DECLARE CURSOR

SP

DELETE ...WHERE CURRENT OF <cursid>

NA

DESCRIBE

NA

DISCONNECT

SP

DROP AUDIT

NR

DROP DATABASE

NR

EXECUTE

NA

EXECUTE IMMEDIATE

NA

EXECUTE PROCEDURE

SP

FETCH

SP

FLUSH

NA

FREE

NA

GET DESCRIPTOR

NA

GET DIAGNOSTICS

NA

GRANT FRAGMENT

NR

INFO

NA

LOAD

NA

OPEN CURSOR

SP

OUTPUT

NA

PREPARE

NA

PUT

NA

RECOVER TABLE

NR

RENAME DATABASE

NR

REVOKE FRAGMENT

NR

ROLLFORWARD DATABASE

NR

SELECT ...INTO TEMP <tab>

NA

SELECT ...FOR UPDATE OF <column>

NA

SET CONNECTION

SP

SET DATASKIP

NR

SET DEBUG FILE

NR

SET DESCRIPTOR

NR

SET TRANSACTION

NR

START DATABASE

NR

UNLOAD

NA

UPDATE STATISTICS

NR

UPDATE ...WHERE CURRENT OF <cursid>

NA

WHENEVER

NA

 

 

 

コンテンツフレーム終了