DatabaseLink`
DatabaseLink`

SQLExecute

SQLExecute[conn,command]

SQL接続でコマンドを実行する.

SQLExecute[conn,command,args]

コマンドに引数を渡す.

SQLExecute[SQLSelect[conn,...]]

conn の開閉を管理する.

詳細とオプション

  • SQLExecuteを使うためには,まずNeeds["DatabaseLink`"]を使って DatabaseLink をロードする必要がある.
  • この関数はデータを削除して元に戻せなくなることがあるため,使用には十分な注意が必要.
  • オプションのサポートと動作はドライバ,ドライバのバージョン,RDBMSタイプによって異なる.
  • クエリの影響を受ける行数を指定する整数を返す.表の削除の際にエラーが生じたら$Failedを返す.
  • 使用可能なオプション
  • "ColumnSymbols" None結果に関連付けるシンボル
    "EscapeProcessing" TrueエスケープされたJDBC関数シンタックスを変換する
    "FetchSize" AutomaticJDBCドライバへの結果セットの大きさの提示
    "GetAsStrings" Falseすべての結果を文字列として返す
    "GetGeneratedKeys" False更新されたレコードに関連付けられたキーを返す
    "MaxFieldSize" Automatic可変長の列のタイプのバイト制限
    "MaxRows" Automatic返される最大行数
    "ShowColumnHeadings" False結果とともに列見出しを返すかどうか
    "Timeout" $SQLTimeoutクエリのタイムアウト
    "BatchSize" 1000パラメータを伴うクエリはこのサイズのバッチごとに処理される
    "JavaBatching" TrueWolfram言語層の代りにJava層でパラメータのバッチ処理を行う

例題

すべて開くすべて閉じる

  (1)

このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,データベースの例の使用で述べているようにDatabaseLink`DatabaseExamples`パッケージを使ってデータベースをインストールするか,もとの状態に戻す必要がある可能性がある.

接続を開始する:

データを選択する:

表を作成する:

データを挿入する:

データを選択する:

データを更新する:

データを削除する:

表を削除する:

スコープ  (5)

データの選択  (1)

条件に合致するデータを選択する:

同じデータを準備文を使って選択する:

準備文の中の列を指定する:

準備文に引数の列を与える:

選択したデータにデータベース関数を適用する:

重複しない値のみを選択する:

値をグループ分けする:

結果の範囲を選択する:

複数の表のデータを結合する:

表の作成  (1)

データの更新 (1)

条件に合致するデータを更新する:

準備文を使う:

データの削除  (1)

条件に合致するデータを削除する:

準備文を使う:

日付と時刻の使用  (1)

日付と時刻のデータは,DateObjectTimeObject,またはSQLDateTimeを使って与えることができる.コラムタイプがDATETIMEDATETIME である表を作成する:

一行挿入する:

選択された日付と時刻は頭部SQLDateTimeで返される:

選択されたデータをもとの形式で表現する:

一般化と拡張  (1)

DatabaseLink が接続を開いたり閉じたりするのを可能にし,データソースから読み取る:

オプション  (11)

"ColumnSymbols"  (1)

クエリの結果が割り当てられるシンボルのリストを与える:

自動的にシンボルを作成する:

列の名前と結果に作用する関数を与える.列見出しが要求されていない場合は,関数の最初の引数はNullとなる:

"EscapeProcessing"  (1)

JDBCの仕様は,クエリを作成するためのエスケープ呼出しシーケンスを定義する.そうでなければ業者特有のSQLが必要となる."EscapeProcessing"オプションを設定して,定義されたエスケープシンタックスを使用する:

エスケープされたSQLを使ってクエリを生成する:

エスケープ処理をしないでクエリを生成するとエラーが生じる:

このRDBMSにネイティブのSQLはエスケープ処理をしないでも使用できる:

エスケープされたSQLを使ってクエリを生成する:

このRDBMSにネイティブのSQLを使用する:

JDBC 4.0の仕様のセクション13.4には,エスケープ処理とサポートされている関数の詳細情報が含まれている.

"FetchSize"  (1)

"FetchSize"オプションは,データベースへの各アクセスの際に取り出す行数をJDBCドライバに提案する.パラメータを増やすと,使用メモリ量が増え,代りにクエリの実行に必要なネットワークトラフィック量が減る:

カーネル層とJava層の両方を含む使用メモリ量を計算する:

小さい取出しサイズで大きい結果を取り出す:

再設定する:

大きい取出しサイズで大きい結果を取り出す:

"GetAsStrings"  (1)

データをWolfram言語型に変換しないで読み取る:

"GetGeneratedKeys"  (1)

生成されたキーの読取りをサポートするデータソースへの接続を開く:

自動採番の主キーで表を作成する:

行を挿入し,キーを返す:

主キー列の内容:

"MaxFieldSize"  (1)

可変長の列のタイプによっては,"MaxFieldSize"オプションを使ってフィールドに返されるバイト数を制限することができる:

VARCHARフィールドで表を作成する:

文字列データを挿入する:

結果のバイト長を制限して,文字列の内容を選択する:

"MaxRows"  (1)

結果に返される行数を制限する:

"ShowColumnHeadings"  (1)

結果の最初の行に列名を含む:

列見出しは不適格な列名に等しい:

"Timeout"  (1)

特定のクエリに対してタイムアウト値を設定する:

"BatchSize"  (1)

長いパラメータリストを含むクエリを生成する際に,使用メモリ量と速度のトレードオフをバッチサイズで調整する:

挿入する乱数データを生成する:

カーネル層とJava層の両方を含む使用メモリ量を計算する:

小さいバッチサイズでクエリを実行すると,Java側のメモリ使用量は比較的小さくなる:

再設定する:

大きいバッチサイズでもう一度実行すると,必要なサーバートリップが少なくなる:

Javaの使用メモリ量は今回の方が多い:

"JavaBatching"  (1)

パラメータのバッチ処理をJava層からWolfram言語層に切り換え,速度を落とす代りにメモリ使用量を減らす:

挿入する乱数データを生成する:

カーネル層とJava層の両方を含む使用メモリ量を計算する:

Java側でバッチ処理を行ってクエリを実行する:

再設定する:

Wolfram言語側でバッチ処理を行ってクエリを実行する:

今回の総メモリ使用量は少なくなった:

考えられる問題  (1)

バッチ操作で生成されたキーを取り出すのは,ドライバとRDBMSに依存する動作である.多くの場合,最後に生成されたキーが返される:

自動採番の主キーで表を作成する:

パラメータ化されたSQLExecuteをこのRDBMSとドライバで使う場合は,最後に生成されたキーだけが返される: