4D v12.4

SQLコマンドの概要

ホーム

 
4D v12.4
SQL
SQLコマンドの概要

 

SQLコマンドの概要  


 

 

4Dは統合されたSQLカーネルを導入しています。他の4Dアプリケーションまたはサードパーティーアプリケーションが (4D OBDC driver経由で) クエリできるSQLサーバも含まれています。
4DのSQLカーネルへのアクセス方法、SQLサーバの設定、SQLクエリで使用できるコマンドとキーワードについての詳細は、4D SQL Referenceマニュアルを参照してください。

"SQL"テーマでは、4DでSQLの使用に関連する多様な4Dコマンドをグループ化しています:

4Dの組み込みSQLコマンドは、接頭辞"SQL" で始まります。そして、以下の原則が実装されます:

  • 特に断らない限り、これらのコマンドを4Dの内部SQLカーネル、外部へのダイレクトまたはODBC経由の接続で使用できます。SQL LOGINコマンドで接続方法を指定できます。
  • 接続のスコープはプロセスです。同時に複数の接続を実行したい場合、新たに開始したプロセスでSQL LOGINを実行します。
  • ON ERR CALLコマンドを使用して、ハイレベルSQLコマンドを実行している間に発生したODBCエラーを捕らえることができます。追加情報を得るにはSQL GET LAST ERRORコマンドを使用します。

ODBC (Open DataBase Connectivity) 標準は、標準化された機能のライブラリを定義します。これらの機能により4Dのようなアプリケーションは、SQLランゲージでODBC互換のデータ管理シ ステム(データベース、スプレッドシート、他の4Dのアプリケーションなど) へアクセスできます。

Note: 4Dではデザインモードで、IMPORT ODBCEXPORT ODBCコマンドを使用して、あるいは手動により、ODBCソースからデータを読み込んだり、ODBCソースへデータを書き出したりすることが可能です。詳細については、4D Design Referenceマニュアルを参照してください。

Note: 4DのハイレベルSQLコマンドを使用して、ODBCデータソースと通信する単純な4Dアプリケーションを実装できます。もしアプリケーションでODBC標準の広範なサポートが必要である場合、4DのローレベルODBCプラグインである、4D ODBC Proをお使いください。

以下は4Dが自動的に設定する4DのタイプとSQLデータタイプの対応リストです:

4DのタイプSQLのタイプ
C_STRINGSQL_C_CHAR
C_TEXTSQL_C_CHAR
C_REALSQL_C_DOUBLE
C_DATESQL_C_TYPE_DATE
C_TIMESQL_C_TYPE_TIME
C_BOOLEANSQL_C_BIT
C_INTEGERSQL_C_SHORT
C_LONGINTSQL_C_SLONG
C_BLOBSQL_C_BINARY
C_PICTURESQL_C_BINARY
C_GRAPHSQL_C_BINARY

SQLリクエストに4D式 (変数、配列、フィールド、ポインタ、有効な式) を挿入するには2通りの方法があります。一つは直接割り当てる方法。もう一つはSQL SET PARAMTERで引数を設定する方法です。

直接の割り当ては2つの方法で実行できます:

  • リクエストのテキスト中で、4Dオブジェクト名を<<>>文字の間に挿入する
  • 参照をコロンの後に記述する
 SQL EXECUTE("INSERT INTO emp (empnum,ename) VALUES (<<vEmpnum>>,<<vEname>>)")
 SQL EXECUTE("SELECT age FROM People WHERE name= :vName")

Note: コンパイルモードでは、($で始まる) ローカル変数への参照を使用することはできません。

この例では、リクエスト実行時に引数が4DのvEmpnum、vEnameおよびvNametheの現在値に置き換えられます。このソリューションは4Dフィールドと配列でも動作します。

この簡単に使用できるシンタックスには、SQL標準に対応していない、また出力引数の使用を許可しないといった欠点もあります。これを修正するには、SQL SET PARAMETERコマンドを使用します。このコマンドを使用して使用モード (入力と出力) とともに、リクエストに各4Dオブジェクトを統合できます。作り出されたシンタックスは標準のものです。詳細については、SQL SET PARAMETERコマンドの説明を参照してください。

1. この例題では4D配列を直接関連付けてSQLクエリを実行します:

 ARRAY TEXT(MyTextArray;10)
 ARRAY LONGINT(MyLongintArray;10)
 
 For(vCounter;1;Size of array(MyTextArray))
    MyTextArray{vCounter}:="Text"+String(vCounter)
    MyLongintArray{vCounter}:=vCounter
 End for
 SQL LOGIN("mysql";"root";"")
 SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<MyTextArray>>, <<MyLongintArray>>)"
 SQL EXECUTE(SQLStmt)


2. この例題では4Dフィールドを直接関連付けて、SQLクエリを実行します:

 ALL RECORDS([Table_2])
 SQL LOGIN("mysql";"root";"")
 SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<[Table_2]Field1>"+">,<<[Table_2]Field2>>)"
 SQL EXECUTE(SQLStmt)

3. この例題では逆参照されたポインタを使用して直接変数を渡して、SQLクエリを実行します:

 C_LONGINT($vLong)
 C_POINTER($vPointer)
 $vLong:=1
 $vPointer:=->$vLong
 SQL LOGIN("mysql";"root";"")
 SQLStmt:="SELECT Col1 FROM TEST WHERE Col1=:$vPointer"
 SQL EXECUTE(SQLStmt)

コンパイルモードでは特定の条件下において、SQL文の中でローカル変数参照を使用できます:

  • Begin SQL / End SQLブロック内でローカル変数を使用できます。ただしEXECUTE IMMEDIATEコマンドは除きます;
  • 変数を (参照ではなく) 引数内で直接使用する場合、SQL EXECUTEコマンドでローカル変数を使用できます。
    例えば以下のコードはコンパイルモードで動作します:
     SQL EXECUTE("select * from t1 into :$myvar")

    以下のコードはコンパイルモードでエラーを生成します:
     C_TEXT(tRequest)
     tRequest:="select * from t1 into :$myvar"
     SQL EXECUTE(tRequest)

4Dランゲージ中でSQLクエリの値を受け取る方法は2つあります:

  • SQL EXECUTE コマンドの追加の引数を使用する (推奨)
  • SQLクエリのINTO節を使用する (特別な場合のために予約されたソリューション)

 
プロパティ 

プロダクト: 4D
テーマ: SQL

 
参照 

4D SQLエンジンにアクセスする
EXPORT ODBC
IMPORT ODBC