4D v144Dと4D SQLエンジン統合の原則 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14
4Dと4D SQLエンジン統合の原則
|
4D SQL | 説明 | 4D |
Varchar | 文字テキスト | テキストまたは文字 |
Real | 範囲+/-1.7E308の浮動小数点数 | 実数 |
Numeric | 範囲+/- 2E64の数値 | 64 bit整数 |
Float | 浮動小数点数 (事実上無限) | Float |
Smallint | 範囲-32,768から32,767の数値 | 整数 |
Int | 範囲-2,147,483,648から2,147,483,647の数値 | 倍長整数 |
Int64 | 範囲 +/- 2E64の数値 | 64 bit整数 |
UUID | 16バイトの数値 (128 bit) で32個の16進文字を含む | UUID 文字フォーマット |
Bit | TRUE/FALSEまたは1/0値のみをとるフィールド | ブール |
Boolean | TRUE/FALSEまたは1/0値のみをとるフィールド | ブール |
Blob | 2GBまで: 画像、アプリケーション、ドキュメントなどのバイナリオブジェクト | Blob |
Bit varying | 2GBまで: 画像、アプリケーション、ドキュメントなどのバイナリオブジェクト | Blob |
Clob | 2GB文字までのテキスト。この カラム (フィールド) にインデックスは付けられません。これはレコード自身には保存されません。 | テキスト |
Text | 2GB 文字までのテキスト。このカラム (フィールド) にインデックスは付けられません。これはレコード自身には保存されません。 | テキスト |
Timestamp | 日付と時間。日付は'YYYY/MM/DD'フォーマットで時間は'HH:MM:SS:ZZ'フォーマット | 個別に処理される日付と時間 (自動変換) |
Duration | 'HH:MM:SS:ZZ'フォーマットの時間 | 時間 |
Interval | 'HH:MM:SS:ZZ'フォーマットの時間 | 時間 |
Picture | 2GBまでのPICTピクチャ | ピク チャ |
数値タイプ間の自動変換が実装されています。
数値を表す文字列は対応する数値に変換されません。特別なCAST関数を使用して、タイプ間の変換を行うことができます。
以下のSQLデータタイプは 実装されていません:
NULL値は4D SQLランゲージおよび4Dデータベースエンジンに実装されています。しかし4Dランゲージではサポートされていません。にもかかわらず、Is field value NullとSET FIELD VALUE NULLコマンドを使用して、4DフィールドのNULL値を読み書きできます。
4Dでの互換性のため、4Dデータベーステーブルに格納されたNULL値は、4Dランゲージを使用して操作する際、自動でデフォルト値に変換されます。例えば以下の文において:
myAlphavar:=[mytable]MyAlphafield
MyAlphafieldフィールドにNULL値が含まれる場合、myAlphavar変数には"" (空の文字列) が代入されます。
デフォルト値はデータ型により異なります:
他方、このメカニズムは原則として、クエリのような4Dデータベースエンジンレベルでは適用されません。実際、空の値の検索 (例えばmyvalue=0) はNULL値が格納されたレコードを見つけませんし、逆の場合も同様です。両方のタイプの値 (デフォルト値とNULL) がレコードの同じフィールドに存在する場合、処理が変更されたり、あるいは追加のコードが必要となることがあります。
この不便さを避けるために、4Dランゲージで、すべての処理を標準化するために使用できるNULL値を空値にマップオプションがあります。ストラクチャエディタのフィールドインスペクタにあるこのオプションを使用すると、デフォルト値を使用する原則をすべての処理に拡張できます。NULL値を含むフィールドは、機械的にデフォルト値を含むものとして扱われます。このオプションはデフォルトでチェックされています。
NULL値を空値にマッププロパティはデータベースエンジンの低レベルで考慮されます。特にIs field value Nullコマンドに影響します。
NULL値の入力を拒否フィールドプロパティは、NULL値が格納されることを防ぐ目的で使用されます:
フィールドのこの属性にチェックが入れられていると、そのフィールドにNULL値を格納できなくなります。この低レベルのプロパティはSQLのNOT NULL属性に対応します。
一般的に、4DデータベースでNULL値を使用したい場合、4DのSQLランゲージのみをデータベースで使用することをお勧めします。
Note: 4Dでは、フィールドに"必須入力"属性を設定することもできます。2つの設定のコンセプトは似ていますが、スコープが異なります。"必須入力"属性はデータ入力コントロールであり、“NULL値の入力を拒否”属性はデータベースエンジンレベルで動作します。
この設定がされたフィールドがNULL値を受け取ると、エラーが生成されます。
4D の統合 SQL サーバーは、ODBC API に沿った日付と時間の定数をサポートします。ODBC 日付・時間定数のシークエンスのシンタックスは以下の通りです:
{constant_type 'value'}
constant_type | value | 詳細 |
d | yyyy-mm-dd | 日付のみ |
t | hh:mm:ss[.fff] | 時間のみ |
ts | yyyy-mm-dd hh:mm:ss[.fff] | 日付と時間(timestamp) |
注: fff はミリ秒を意味しています。
例えば、以下の様な定数を使用することが出来ます:
{ d '2013-10-02' }
{ t '13:33:41' }
{ ts '1998-05-02 01:23:56.123' }
4Dプロジェクトメソッドにセキュリティ関連のプロパティ、SQL利用可が追加されました:
このプロパティはODBC Driver経由、あるいはBegin SQL/End SQLタグの間に挿入されたSQLコード、またはQUERY BY SQLコマンドによる実行など、内部外部問わずすべてのSQLクエリに適用されま す。
Notes:
4Dはスキーマのコンセプトを実装しています。スキーマはデータベースのテーブルを含む仮想的なオブジェクトです。SQLにおいてスキーマの目的は、異な るデータベースオブジェクトのセットに特定のアクセス権を割り当てることです。スキーマはデータベースを、そのデータベース全体を形成する個々の独立する エンティティに分割します。つまりあるテーブルはいつもただ1つのスキーマに属します。
Note: スキーマによるアクセスコントロールは、外部からの接続のみに適用されます。Begin SQL/End SQLタグ、SQL EXECUTE、QUERY BY SQL等によって4D内で実行されるSQLコードは、常に完全なアクセスを持ちます。
4D SQLサーバのレベルでは、マルチデータベースのアーキテクチャが実装されています。4Dでは以下のことが可能です:
SQLランゲージでは主キーを使用して、テーブル中のレコード (ロー) を指定するカラム (フィールド) 決定します。主キーの設定は特に4Dテーブルのレコード複製機能において必要となります (SQLを使用した複製参照)。
4Dでは2つの方法を使用してテーブルの主キーを管理できます:
テーブルを作成するとき (CREATE TABLEコマンドを使用) またはカラムを追加や変更するとき (ALTER TABLEコマンドを使用)、主キーを設定できます。主キーはPRIMARY KEY句とそれに続くカラム名またはカラムリストで指定されます。 詳細はを参照してください。
4Dではストラクチャエディタのコンテキストメニューを使用して直接主キーを作成したり削除したりできます。
主キーを作成するには:
主キーに含められたフィールドにはエディタ中で下線が引かれ、SQL定義にはPRIMARY KEYキーワードが表示されます。
主キーに属するフィールドには重複する値が含まれてはいけません。既にテーブルレコードに重複する値が存在する場合、このことを知らせる警告ダイアログが表示されます。
Note: 主キーに属するカラムはNULL値を受け入れません。
テーブルから主キーを取り除くには:
4D の統合SQLエンジンは、標準のSQL viewsをサポートしています。ビューとは複数の異なるデータベースのテーブルからのデータを受け取れる仮想テーブルです。ビューは定義されると SELECT 宣言の中で実際のテーブルと同じように使用することができます。
ビュー の中のデータは SELECT コマンドに基づいた定義クエリによって定義されます。定義クエリの中で使用される実際のテーブルは「ソーステーブル」と呼ばれます。SQLビューには標準 のテーブルと同じように列と行がありますが、実際に存在しているわけではありません。処理され、メモリーに格納された結果を表示しているにすぎません。 データベースに実際に保存されているのはビューの定義だけです。
4D v14ではビューを管理するためのSQLコマンドが二つ用意されています。SQLコマンドとDROP VIEW です。
DROP VIEW と CREATE VIEW ではなくて??
プロダクト: 4D
テーマ: 4DでSQLを使用する
SQLリファレンス ( 4D v14)
SQLリファレンス ( 4D v14 R2)
SQLリファレンス ( 4D v14 R3)
SQLリファレンス ( 4D v14 R4)
Inherited from : 4Dと4D SQLエンジン統合の原則 ( 4D v12.1)