まずとてもシンプルなクエリから始めましょう: ビデオライブラリにいくつ映画が登録されているかを取得します。4Dランゲージでは以下のようにコードを書きます:
C_LONGINT($AllMovies)
$AllMovies:=0
ALL RECORDS([MOVIES])
$AllMovies:=Records in selection([MOVIES])
ALERT("The Video Library contains "+String($AllMovies)+" movies")
- SQLエンジンを使用して同様のことを行う最初の方法は、クエリ文をBegin SQLとEnd SQLタグの間に置くことです。この方法では以下のようになります:
C_LONGINT($AllMovies)
$AllMovies:=0
Begin SQL
SELECT COUNT(*)
FROM MOVIES
INTO <<$AllMovies>>
End SQL
ALERT("The Video Library contains "+String($AllMovies)+" movies")
- 御覧の通り、クエリの結果を変数にとることができます (今回の場合$AllMovies)。変数が"<<"と">>"で囲まれていることに注目してください。
有効な4D表現式 (変数、フィールド、配列、式など) を参照する別法は、表現式の前にコロン":"を置くことです:
C_LONGINT($AllMovies)
$AllMovies:=0
Begin SQL
SELECT COUNT(*)
FROM MOVIES
INTO :$AllMovies
End SQL
ALERT("The Video Library contains "+String($AllMovies)+" movies")
インタープロセス変数の場合は少し異なる記法が必要なことに注意してください。インタープロセス変数は"["と"]"の間に記述しなければなりません:
C_LONGINT($AllMovies)
<>AllMovies:=0
Begin SQL
SELECT COUNT(*)
FROM MOVIES
INTO <<[<>AllMovies]>>
End SQL
ALERT("The Video Library contains "+String(<>AllMovies)+" movies")
- SQLエンジンを使用する二つ目の方法は統合された汎用SQL (ODBC互換) コマンドを利用することです。この場合、コードは以下のようになります:
汎用SQLコマンドに関する詳細は4DランゲージリファレンスマニュアルのSQLを参照してください。 - SQLエンジンを使用する三番目の方法は4DのQUERY BY SQLコマンドを使用することです。この場合、コードは以下のようになります:
C_LONGINT($AllMovies)
$AllMovies:=0
QUERY BY SQL([MOVIES];"ID <> 0")
$AllMovies:=Records in selection([MOVIES])
ALERT("The Video Library contains "+String($AllMovies)+" movies")
実際のところ、QUERY BY SQLコマンドは以下のようなシンプルなSELECTクエリを実行するために使用できます:
SELECT *
FROM myTable
WHERE <SQL_Formula>
myTableは第一引数に渡されるテーブル名で、SQL_Formulaは第二引数に渡されるクエリ文字列です:
今回の場合WHERE句がありません。そこで"ID <> 0"を使用しています。同等のSQLは以下のようになります:
SELECT *
FROM MOVIES
WHERE ID <> 0
- SQLエンジンを使用する四番目の方法は、ダイナミックなSQLコマンドEXECUTE IMMEDIATEを使用することです。クエリは以下のようになります:
C_LONGINT(AllMovies)
AllMovies:=0
C_TEXT(tQueryTxt)
tQueryTxt:="SELECT COUNT(*) FROM MOVIES INTO :AllMovies"
Begin SQL
EXECUTE IMMEDIATE :tQueryTxt;
End SQL
ALERT("The Video Library contains "+String(AllMovies)+" movies")
警告: 最後の例題ではプロセス変数が使用されている点に注目してください。これはコンパイルモードでデータベースを実行する際に必要なことです。この文脈においてはEXECUTE IMMEDIATEでローカル遠陬を使用することはできません。
以上の例題をテストするには、4D SQL Code Samplesデータベースを起動し、メインダイアログボックスを開きます。ダイアログの左にクエリモードを選択するエリアがあります:
その後SQL query results in variablesボタンをクリックします。