ここは旧式の4DドキュメントWebサイトです。最新のアップデートされたドキュメントを読むには新サイトをご利用下さい→ developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v19
4Dと4D SQLエンジン統合の原則
|
4D SQL | ユーザーカラムデータ型値* | 説明 | 4D |
Varchar | 10 | 文字テキスト | テキストまたは文字 |
Real | 6 | 範囲+/-1.7E308の浮動小数点数 | 実数 |
Numeric | 5 | 範囲+/- 2E64の数値 | 64 bit整数 |
Float | 6 | 範囲+/-1.7E308の浮動小数点数 | Float |
Smallint | 3 | 範囲-32,768から32,767の数値 | 整数 |
Int | 4 | 範囲-2,147,483,648から2,147,483,647の数値 | 倍長整数 |
Int64 | 5 | 範囲 +/- 2E64の数値 | 64 bit整数 |
UUID | 13 | 32個の16進文字で表現される16バイトの数値 (128 bit) | UUID 文字フォーマット |
Bit | 1 | TRUE/FALSEまたは1/0値のみをとるフィールド | ブール |
Boolean | 1 | TRUE/FALSEまたは1/0値のみをとるフィールド | ブール |
Blob | 18 | 2GBまで: 画像、アプリケーション、ドキュメントなどのバイナリオブジェクト | Blob |
Bit varying | 18 | 2GBまで: 画像、アプリケーション、ドキュメントなどのバイナリオブジェクト | Blob |
Clob | 14 | 2GB文字までのテキスト。この カラム (フィールド) にインデックスは付けられません。これはレコード自身には保存されません。 | テキスト |
Text | 14 | 2GB 文字までのテキスト。このカラム (フィールド) にインデックスは付けられません。これはレコード自身には保存されません。 | テキスト |
Timestamp | 8 | 日付と時間。日付は'YYYY/MM/DD'フォーマットで時間は'HH:MM:SS:ZZ'フォーマット | 個別に処理される日付と時間 (自動変換) |
Duration | 9 | 'HH:MM:SS:ZZ'フォーマットの時間 | 時間 |
Interval | 9 | 'HH:MM:SS:ZZ'フォーマットの時間 | 時間 |
Picture | 12 | 2GBまでのPICTピクチャ | ピク チャ |
Object | 21 | バイナリーにシリアライズされたJSON オブジェクト(VARCHARとしてのCAST) | Object |
* _USER_COLUMNS および _USER_VIEW_COLUMNS システムテーブルから返されます。詳細な情報については、システムテーブル を参照してください。
数値タイプ間の自動変換が実装されています。
数値を表す文字列は対応する数値に変換されません。特別な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ランゲージのみをデータベースで使用することをお勧めします。
注: 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' }
SQL においては、月または日に "0" を指定している日付は拒否されてしまいます。例えば、次のような式はエラーを生成します: {d'0000-00-00'}、CAST('0000-00-00' AS TIMESTAMP) など。空日付 (Null日付ではないことに注意) に対して SQL クエリを行うには、次の例のように4D式を利用します:
C_LONGINT($count)
$blankDate:=!00-00-00!
Begin SQL
SELECT COUNT(*) FROM Table_1
WHERE myDate = :$blankDate
INTO :$count;
End SQL
プロジェクトメソッドにおいて設定可能な"SQL利用可"プロパティは、SQL経由の4Dプロジェクトメソッドの実行を管理します:
このプロパティはODBC Driver経由、あるいはBegin SQL/End SQLタグの間に挿入されたSQLコード、またはQUERY BY SQLコマンドによる実行など、内部外部問わずすべてのSQLクエリに適用されま す。
Notes:
4Dはスキーマのコンセプトを実装しています。スキーマはデータベースのテーブルを含む仮想的なオブジェクトです。SQLにおいてスキーマの目的は、異な るデータベースオブジェクトのセットに特定のアクセス権を割り当てることです。スキーマはデータベースを、そのデータベース全体を形成する個々の独立する エンティティに分割します。つまりあるテーブルはいつもただ1つのスキーマに属します。
データベースのDesignerとAdministratorのみがスキーマを作成、更新、削除できます。
警告: SQL スキーマを実装するには、4D のアクセス管理システムが有効化されていることが必要になります(別の言い方をすると、Designer にパスワードが割り当てられている必要があります)。そうでない場合、全てのユーザーが制限なくデータにアクセスできてしまうことになります。
Note: スキーマによるアクセスコントロールは、外部からの接続のみに適用されます。Begin SQL/End SQLタグ、SQL EXECUTE、QUERY BY SQL等によって4D内で実行されるSQLコードは、常に完全なアクセスを持ちます。
4D SQLサーバのレベルでは、マルチデータベースのアーキテクチャが実装されています。4Dでは以下のことが可能です:
SQLランゲージでは主キー(プライマリーキー)を使用して、テーブル中のレコード (行) を指定するテーブルカラム (フィールド) 決定します。主キーの設定は、特に4Dテーブルのレコード複製機能(SQLを使用した複製参照)および4Dテーブルのログ機能を使用するためには4D v14以降では必要となります。
4Dでは2つの方法を使用して主キーを管理できます:
注:
テーブルを作成するとき (CREATE TABLEコマンドを使用) またはカラムを追加や変更するとき (ALTER TABLEコマンドを使用)、主キーを設定できます。主キーはPRIMARY KEY句とそれに続くカラム名またはカラムリストで指定されます。 詳細はを参照してください。
4Dではストラクチャーエディターのコンテキストメニューを通じて、主キーを直接作成・削除することができます。
この点についてのより詳細な情報については、4D デザインリファレンス マニュアルの主キーを設定、削除するを参照して下さい。
ビュー の中のデータは SELECT コマンドに基づいた定義クエリによって定義されます。定義クエリの中で使用される実際のテーブルは「ソーステーブル」と呼ばれます。SQLビューには標準 のテーブルと同じように列と行がありますが、実際に存在しているわけではなく、セッションの間メモリーに格納された処理結果を表示しているにすぎません。 実際に一時保存されているのはビューの定義だけです。
Blog: Read 4D object fields with SQL Engine
sql_data_type_name
プロダクト: 4D
テーマ: 4DでSQLを使用する
変更: 4D v17 R5
SQLリファレンス ( 4D v19)