4D v16

SQLクエリの結果を変数に受け取る

ホーム

 
4D v16
SQLクエリの結果を変数に受け取る

SQLクエリの結果を変数に受け取る  


 

 

まずとてもシンプルなクエリから始めましょう: ビデオライブラリにいくつ映画が登録されているかを取得します。4Dランゲージでは以下のようにコードを書きます:

 C_LONGINT($AllMovies)
 $AllMovies:=0
 ALL RECORDS([MOVIES])
 $AllMovies:=Records in selection([MOVIES])
 ALERT("The Video Library contains "+String($AllMovies)+" movies")

  • SQLエンジンを使用して同様のことを行う最初の方法は、クエリ文をBegin SQLEnd 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互換) コマンドを利用することです。この場合、コードは以下のようになります:

     C_LONGINT($AllMovies)
     $AllMovies:=0
      ` 内部SQLエンジンに接続を初期化する
     SQL LOGIN(SQL_INTERNAL;"";"")
      ` クエリを実行し、$AllMovies変数に結果を返します。
     SQL EXECUTE("SELECT COUNT(*) FROM MOVIES";$AllMovies)
      ` 見つかったすべてのレコードを取り出す
     SQL LOAD RECORD(SQL all records)
      ` 接続を閉じる
     SQL LOGOUT
     ALERT("The Video Library contains "+String($AllMovies)+" movies")


    汎用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は第二引数に渡されるクエリ文字列です:

     QUERY BY SQL(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ボタンをクリックします。

 
プロパティ 

プロダクト: 4D
テーマ: チュートリアル

 
履歴 

 
ARTICLE USAGE

SQLリファレンス ( 4D v16)